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

集合之Set

时间:2019-05-04 14:57:54      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:常用   地址   形式   .com   添加元素   empty   hash   有一个   散列码   

1.HashSet

HashSet是无序的,而且里面的元素不可重复,每个对象都有其对应的hashCode()方法,hashCode()方法主要是获得该对象的散列码,其值就是对象的内存地址,但是String除外。

ArrayList如果不知道元素的下标那么就要全部遍历一遍,而HashSet则不用,所以比ArrayList要好。

常用方法:size,isEmpty,addAll()可以添加整个list集合,

判断元素是否重复:

1.添加元素时首先调用要存入对象的hashCode()方法,获取到hashCode的值

2.根据hashCode值,使用哈希算法确定在哈希表中的存放位置

3.判断改位置是否有元素,如果没有直接将元素放入该位置,如果有则调用已有对象的equals方法和要放入的对象进行比较:如果返回true,则认为是重复元素,舍弃要放入的元素。如果返回false则在当前位置下,以链表的形式追加。但是java8中有一个阈值,如果超过当前阈值则会将链表转换为TreeSet。

tips:使用hashSet时需要重写hashCode和equals方法。

测试:

定义一个学生类Student,定义no,name属性,并且加入构造方法,getter,setter方法并且重写toString()方法

技术图片

新建一个类定义了一个方法用来测试:

技术图片

 

发现尽管student的值一样但是因为它们的内存地址不一样,也就是hashcode的值是不一样的,所以可以添加进去set集合。

在student类中再重写equlas(),重写hashCode()方法:

技术图片

再次调用test02()方法:

技术图片

发现其实用了hashcode和equlas方法,因为equlas方法返回的是true;所以无法添加students2.

集合之Set

标签:常用   地址   形式   .com   添加元素   empty   hash   有一个   散列码   

原文地址:https://www.cnblogs.com/javazyh/p/10808295.html

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