集合之Set

Posted javazyh

tags:

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

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的主要内容,如果未能解决你的问题,请参考以下文章

python之set集合基本操作

JavaSE集合之Set

Java集合进阶之Collection单列集合(Set)

Python 数据类型之 集合 set

Python基础之集合set

Python之set集合