Set鸠合有多个子类,这里我们引见个中的java.util.HashSet、java.util.LinkedHashSet这两个鸠合。
特性:都邑以某种划定规矩保证存入的元素不涌现反复,Set接口中元素无序
①元素不涌现反复
②元素无序( 指存取无序)
哈希表:只需往哈希表中存储自定义对象,那末该自定义对象 所属的类 必需重写hashCode&equals要领
⑴HashSet鸠合
底层是经由过程HashMap完成的 底层new HashMap对象 ,只用了 key 并没有运用 value value指向一致地点 new Object()
API引见:
java.util.HashSet是Set接口的一个完成类,它所存储的元素是不可反复的,而且元素都是无序的(即存取递次不一致)。java.util.HashSet底层的完成实际上是一个java.util.HashMap支撑,HashSet是依据对象的哈希值来肯定元素在鸠合中的存储位置,因而具有优越的存取和查找机能。保证元素唯一性的体式格局依赖于:hashCode与equals要领。
特性:
①元素不反复
②存取递次不一致
③优越的存取和查找机能
④元素唯一性的体式格局依赖于:hashCode与equals要领
HashSet鸠合存储数据的构造(哈希表):
在JDK1.8之前,哈希表底层采纳数组+链表完成,即运用链表处置惩罚争执,
统一hash值的链表都存储在一个链内外。然则当位于一个桶中的元素较多,
即hash值相称的元素较多时,经由过程key值顺次查找的效力较低。
而JDK1.8中,哈希表存储采纳数组+链表+红黑树完成,
当链表长度凌驾阈值(8)时,将链表转换为红黑树,如许大大减少了查找时间。
总而言之,JDK1.8引入红黑树大水平优化了HashMap的机能,
那末关于我们来说保证HashSet鸠合元素的唯一,实在就是依据对象的
hashCode和equals要领来决议的。假如我们往鸠合中寄存自定义的对象,
那末保证其唯一,就必需复写hashCode和equals要领竖立属于当前对象的比较体式格局。
总结:1.8之前是经由过程 哈希表底层采纳数组+链表完成
1.8中是经由过程哈希表存储采纳数组+链表+红黑树完成(链表长度凌驾阈值(8)时,将链表转换为红黑树,如许大大减少了查找时间)保证元素其唯一,必需重写hashCode和equals要领竖立属于当前对象的比较体式格局
HashSet存储自定义范例元素(重点):
给HashSet中寄存自定义范例元素时,须要重写对象中的hashCode和equals要领,
竖立本身的比较体式格局,才保证HashSet鸠合中的对象唯一
⑵LinkedHashSet
HashSet保证元素唯一,但是元素寄存进去是没有递次的,那末我们要保证有序,怎么办呢,在HashSet下面有一个子类java.util.LinkedHashSet,它是链表和哈希表组合的一个数据存储构造。
以上就是java set什么意思的细致内容,更多请关注ki4网别的相干文章!