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