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

Java-LinkedHasSet实现原理

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

Java-LinkedHasSet实现原理

概述

linkedHashSet 是具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与HashSet 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。

注意,此实现不是同步的。如果多个线程同时访问链接的哈希 Set,而其中至少一个线程修改了该 Set,则它必须保持外部同步。

实现

对于 linkedHashSet 而言,它继承与 HashSet、又基于 linkedHashMap 来实现的。

linkedHashSet 底层使用 linkedHashMap 来保存所有元素,它继承与 HashSet,其所有的方法操作上又与 HashSet 相同,因此 linkedHashSet 的实现上非常简单,只提供了四个构造方法,并通过传递一个标识参数,调用父类的构造器,底层构造一个 linkedHashMap来实现,在相关操作上与父类 HashSet 的操作相同,直接调用父类 HashSet 的方法即可。linkedHashSet 的源代码如下:

public class linkedHashSet extends HashSet implements Set, Cloneable, java.io.Serializable {

    private static final long serialVersionUID = -2851667679971038690L;

    
    public linkedHashSet(int initialCapacity, float loadFactor) {

        super(initialCapacity, loadFactor, true);
    }

    
    public linkedHashSet(int initialCapacity) {
        super(initialCapacity, .75f, true);

    }
    
    
    public linkedHashSet() {

        super(16, .75f, true);
    }
    
    
    public linkedHashSet(Collection c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);

    }
}

在父类 HashSet 中,专为 linkedHashSet 提供的构造方法如下,该方法为包访问权限,并未对外公开。

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new linkedHashMap(initialCapacity, loadFactor);
}

由上述源代码可见,linkedHashSet 通过继承 HashSet,底层使用 linkedHashMap,以很简单明了的方式来实现了其自身的所有功能。

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

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

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