HashSet的无序性和不重复性

简介: 无序性:无序性是指当我们往HashSet集合里添加数据时,其位置是不确定的。Eg:假设只有16个位置当你往容器中添加数据时,其可能在任何位置。表格内数字表示添加顺序:(HashSet底层是数组加链表(jdk7),jdk8中其底层是数组+链表+红黑树,下面以jdk7为例) 2 1 3 4

 无序性:无序性是指当我们往HashSet集合里添加数据时,其位置是不确定的。假设只有16个位置当你往容器中添加数据时,其可能在任何位置。

表格内数字表示添加顺序:(HashSet底层是数组加链表(jdk7),jdk8中其底层是数组+链表+红黑树,下面以jdk7为例)

2 1 3
4
5

不可重复性:当你调用add()方法添加一个数据时,其底层会先通过算法计算出其哈希值,找到添加的位置,接下来:

                       ①:当该位置上没有元素时,直接添加到该位置上,如果存在,再分以下两种情况。

                       ②:当该位置上有元素时(可能是一个,或者以链表形式存在多个),比较他们的哈希值,若不相同,就直接添加。

                       ③:当其位置上有元素且哈希值相同时,调用对象所在类的equals()方法,若返回false,则添加成功,若返回true,则添加失败。

               Eg:jdk7中添加成功后,新元素成为该位置上链表的表头。 jdk8中添加成功后,新元素成为该位置上链表的表尾。

Eg:

@Test
    public void TestHashSet(){
        HashSet s1 = new HashSet();
       //起初new一个HashSet对象,其是长度为0,并未初始化数组长度。
        System.out.println(s1.size());
        //当其进行add()操作时,此时它的容量是16,
        // 当其内部存储量达到当前容量的0.75(HashSet的加载因子)时,扩容,
        // 其每一次扩容为当前的两倍。
        s1.add(123);
        s1.add(5546);
        s1.add(234);
        System.out.println(s1);
        s1.add(123);
        //当其检测到相同的对象时,自动去除。
        System.out.println(s1);
    }

image.gif


相关文章
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
48 3
|
2月前
|
存储 Java 开发者
HashSet和TreeSet教你重新认识Java集合的无序与有序
【10月更文挑战第14天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了它们分别实现无序和有序存储的机制。通过理解HashSet基于哈希表的无序特性和TreeSet利用红黑树实现的有序性,帮助开发者更好地选择合适的集合类型以满足不同的应用场景。
32 2
|
2月前
|
存储 Java
Java集合框架中的HashSet和TreeSet,解释了它们如何分别实现无序和有序存储。
【10月更文挑战第13天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解释了它们如何分别实现无序和有序存储。通过解析内部机制和示例代码,帮助读者理解这两种集合的特点和应用场景,从而更好地选择合适的集合类型满足实际需求。
34 3
|
6月前
|
存储 Java
打破常规!HashSet和TreeSet教你重新认识Java集合的无序与有序
【6月更文挑战第17天】Java集合框架中的Set接口,HashSet无序而TreeSet有序。HashSet基于哈希表,元素插入顺序不可预测,适合快速去重。TreeSet利用红黑树保证有序性,支持自然排序或自定义排序。若需同时无序和有序,可先用HashSet去重,再将元素加入TreeSet,但会牺牲性能。选择时依据对顺序和性能的需求。
175 2
|
6月前
|
算法 Java 数据处理
从HashSet到TreeSet,一场Java集合的“不重复”革命!
【6月更文挑战第17天】Java集合框架中的Set接口确保元素唯一,HashSet基于哈希表实现高效查找,不保证顺序;TreeSet使用红黑树保持排序,适用于有序场景。示例展示了HashSet的无重复添加及TreeSet的升序排列。Set是处理唯一性数据的利器。
44 0
|
存储 安全
集合框架系列(三)之 map双列集合
集合框架系列(三)之 map双列集合
|
存储 Java
Java集合学习3:Set集合-HashSet
无序、无下标、不可以重复元素 方法:全部继承Collection的方法
Java集合学习3:Set集合-HashSet
|
消息中间件 前端开发 JavaScript
LinkedHashSet 有序且不能重复的集合
哈喽,大家好,我是指北君。 同 HashSet 与 HashMap 的关系一样,本篇文章所介绍的 LinkedHashSet 和 LinkedHashMap 也是一致的。在 JDK 集合框架中,类似 Set 集合通常都是由对应的 Map 类集合来实现的(TreeSet 和 TreeMap 同理),这里很重要的一个理论就是:Set 类集合是不允许重复的,而 Map 类集合的 key 也是不允许重复的,所以通常很容易就用 Map 类集合实现了 Set 类集合。
LinkedHashSet 有序且不能重复的集合
|
存储 算法 Java
Java编程集合之HashSet+TreeSet
1.集合的应用 集合就是一个小容器 增删改查 2.集合使用的情形 各自集合的特点 3.底层原理 数据结构的存储方式 4.自己尝试实现
134 0
|
消息中间件 前端开发 JavaScript
有趣又有序的LinkedHashMap(二)
哈喽,大家好,我是指北君。 PS:最近是跳槽的高峰期,我连日加班好多天,整理出了包含16000 多道面试题的面试宝典,并且指北君也会持续更新这份面试宝典中的题目,希望它能帮助大家找到自己心仪的工作!【文末有领取方式】
有趣又有序的LinkedHashMap(二)

热门文章

最新文章