HashSet 和 LinkedSet 数据结构

HashSet

一、存储元素是无序的。注:无序指的是不按添加的顺序存储。

二、HashSet集合的数据结构是:哈希表

  1、JDK1.8之前是:哈希表 = 数组 + 链表

  2、JDK1.8之后是:哈希表 = 数组 + 链表

           如果元素有哈希(值)冲突,导致根据哈希值分组之后的元素超过8个。链表就会变成红黑树,即:哈希表 = 数组 + 红黑树。目的是为了提高查询的速度。

三、为什么不能存储相同元素:

  原因:添加元素的时候会调用hasCode和equals两个方法,如果都为true,就认为是相同的元素,就不添加到集合。

四、如果需要存储自定义类型的元素,一定要重写hasCode和equals两个方法,这样才能保证集合中没有重复的元素。

LinkedSet

一、存储元素是有序的。注:有序指按添加元素的顺序展示元素。

二、LinkedSet集合的数据结构:哈希表 = 数组 + 链表/红黑树 + 链表。多了一条链表,用来记录元素的存储顺序,保证元素是有序的。

原文地址:https://www.cnblogs.com/yinmu/p/15214692.html