码迷,mamicode.com
首页 > 其他好文 > 详细

HashSet集合

时间:2019-08-19 19:26:27      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:hashcode   索引   ring   对象   list   nbsp   out   col   元素   

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集合

标签:hashcode   索引   ring   对象   list   nbsp   out   col   元素   

原文地址:https://www.cnblogs.com/xsh726/p/11378839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!