栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

HashSet的无序性和不重复性

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HashSet的无序性和不重复性

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

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

213
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);
        
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号