HashSet集合

Posted xsh726

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashSet集合相关的知识,希望对你有一定的参考价值。

1.HashSet

  Set集合,无索引,不可以重复,无序

  在使用 list 集合时,add方法返回的永远时true,有序,有索引

  在使用 Set 集合时,add方法再添加重复元素时,返回的false,无序,无索引

 

 1     HashSet<String> hashSet = new HashSet<>();
 2         hashSet.add("t");
 3         hashSet.add("a");
 4         hashSet.add("b");
 5         hashSet.add("b");
 6         hashSet.add("c");
 7         hashSet.add("r");
 8         hashSet.add("a");
 9         System.out.println(hashSet.size()); //    长度为    5
10         
11         System.out.println(hashSet);        //输出结果        [a, b, r, c, t]
12 
13 
14         for (String s : hashSet)             //    输出结果        a b r c t 
15             System.out.print(s+ " ");
16         

 

  1.储存自定义对象保证元素的唯一性

  2.当 hashset 存储自定义对像时(例:student类),必须重写 equals 方法和 hashcode 方法才能保证元素的唯一

 

  3.把对象往集合中添加时,会调用hashcose方法,hashcose值一样时才会调用equals方法。

  

  

1 public boolean equals(Object obj)
2     //向下转型为Student类
3     Student s = (Student)obj;
4     return this.name.equals(s.name) && this.age == s.age;
5   

 

 

1 // 因为每个对象的hashcode的值都不一样,
2 // 而 equals 方法需要两个对象的 hashcode值都一样才可以进行判断
3 // 所以在hashcode方法中返回一个固定的值,
4     public int hashCode() 
5         return 10;
6 
7 
8     

 

  1.hashset原理

     我们使用set方法都是需要去掉重复的元素,如果在储存的时候逐个equals()方法比较,效率低,哈希算法提高

   了去重复的效率,降低了使用equals()方法的次数

     当 hashset 调用了 add() 方法储存对象的时候,先调用对象的 hashcode()方法得到一个哈希值,

   然后再集合中查找是否有哈希值相同的对像,如果没有安徽细致相同的对象就直接存入集合,

   如果有哈希值相同的对象,就和哈希值相同的对象诸葛进行 equals()比较,比较结果为false就存入,true就不存

     将自定义类(如,student,person,cat)的对象存入hashset去重复,必须重写hashcode()和equals方法

 

以上是关于HashSet集合的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE学习总结(十三)Set集合HashSet集合LinkedHashSet集合TreeSet集合比较器的使用利用Set集合实现去重

31.set集合与HashSet

Set集合

Java学习(set接口HashSet集合)

集合 Set——HashSet和TreeSet

由浅入深理解java集合——集合 Set