Java数据结构之Set学习总结

前言:

   前面介绍了Java的数据结构List、Map,今天抽空学习总结一下另外一种数据结构Set。java

Set介绍

   Set相对于List、Map是最简单的一种集合。集合中的对象不按特定的方式排序,而且没有重复对象。算法

特色:数组

  •  它不容许出现重复元素;
  • 不保证和政集合中元素的顺序
  • 容许包含值为null的元素,但最多只能有一个null元素

Set是一个接口,实例化Set能够采用下面的方式:数据结构

  • HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快 
  • TreeSet :TreeSet类实现了SortedSet接口,可以对集合中的对象进行排序 

Set的基本操做:学习

  •  boolean add(Object o)   :向集合中加入一个对象的引用
  • void clear()                        :删除集合中全部的对象,即再也不持有这些对象的引用
  • boolean isEmpty()           :判断集合是否为空
  • boolean contains(Object o): 判断集合中是否持有特定对象的引用
  • Iterartor iterator()              : 返回一个Iterator对象,能够用来遍历集合中的元素
  • boolean remove(Object o):从集合中删除一个对象的引用
  • int size()                               :返回集合中元素的数目
  • Object[] toArray()                 :返回一个数组,该数组中包括集合中的全部元素

Set的使用

添加数据spa

Set<Integer> hashSet = new HashSet<Integer>();
 hashSet.add(3);
 hashSet.add(2);
 hashSet.add(5);
 hashSet.add(1);
 //模拟添加一个重复数据
 hashSet.add(2);
 Log.e(TAG,"set hashSet :"+hashSet+" size : "+hashSet.size());

 Set<Integer> treeSet = new TreeSet<>();
 treeSet.add(3);
 treeSet.add(2);
 treeSet.add(5);
 treeSet.add(1);
 Log.e(TAG,"set treeSet :"+treeSet +" size : "+treeSet.size());

运行结果:code

 经过运行结果能够看出,Set是不可重复的,TreeSet是有序的,HashSet是无序的。对象

TreeSet实现排序默认是升序,想要实现自定义排序能够经过传进去一个Comparator或者TreeSet的添加对象实现Comparator接口。blog

Set遍历排序

for循环方式

  for (Integer integer :hashSet){
            Log.e(TAG,"set integer :"+integer);
   }

迭代器方式

Iterator<Integer> iterator =hashSet.iterator();
while (iterator.hasNext()){
     Integer integer=iterator.next();
     Log.e(TAG,"set integer :"+integer);
   }

知识扩展:

 最近在阿里java开发手册上看到了这句话:Map/Set 的 key 为自定义对象时,必须重写 hashCode 和 equals。这里Set集合中放入的是String类型,假如咱们放入一个本身定义的类实例的时候,好比Person类实例,这时候咱们要本身从新hashcode和equal方法,用本身的关键字段来重写,由于当使用HashSet时,hashCode()方法就会获得调用,判断已经存储在集合中的对象的hash code值是否与增长的对象的hash code值一致;若是不一致,直接加进去;若是一致,再进行equals方法的比较,equals方法若是返回true,表示对象已经加进去了,就不会再增长新的对象,不然加进去

总结:

 主要从新熟悉一下Map这种数据结构,更好的在项目中使用不可重复的数据结构。

相关文章
相关标签/搜索