`
zhangshixi
  • 浏览: 675551 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

深入Java集合学习系列:LinkedHashSet的实现原理

阅读更多

1.    LinkedHashSet概述:

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

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

 

2.    LinkedHashSet的实现:

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

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

public class LinkedHashSet<E>
    extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {

    private static final long serialVersionUID = -2851667679971038690L;

    /**
     * 构造一个带有指定初始容量和加载因子的新空链接哈希set。
     *
     * 底层会调用父类的构造方法,构造一个有指定初始容量和加载因子的LinkedHashMap实例。
     * @param initialCapacity 初始容量。
     * @param loadFactor 加载因子。
     */
    public LinkedHashSet(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor, true);
    }

    /**
     * 构造一个带指定初始容量和默认加载因子0.75的新空链接哈希set。
     *
     * 底层会调用父类的构造方法,构造一个带指定初始容量和默认加载因子0.75的LinkedHashMap实例。
     * @param initialCapacity 初始容量。
     */
    public LinkedHashSet(int initialCapacity) {
        super(initialCapacity, .75f, true);
    }

    /**
     * 构造一个带默认初始容量16和加载因子0.75的新空链接哈希set。
     *
     * 底层会调用父类的构造方法,构造一个带默认初始容量16和加载因子0.75的LinkedHashMap实例。
     */
    public LinkedHashSet() {
        super(16, .75f, true);
    }

    /**
     * 构造一个与指定collection中的元素相同的新链接哈希set。
     * 
     * 底层会调用父类的构造方法,构造一个足以包含指定collection
     * 中所有元素的初始容量和加载因子为0.75的LinkedHashMap实例。
     * @param c 其中的元素将存放在此set中的collection。
     */
    public LinkedHashSet(Collection<? extends E> c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);
    }
}

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

/**
     * 以指定的initialCapacity和loadFactor构造一个新的空链接哈希集合。
     * 此构造函数为包访问权限,不对外公开,实际只是是对LinkedHashSet的支持。
     *
     * 实际底层会以指定的参数构造一个空LinkedHashMap实例来实现。
     * @param initialCapacity 初始容量。
     * @param loadFactor 加载因子。
     * @param dummy 标记。
     */
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
	map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
    }

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

 

3.  相关说明:

   1) 相关HashSet的实现原理,请参考我的上一遍总结:深入Java集合学习系列:HashSet的实现原理

   2)相关HashMap的实现原理,请参考我的上一遍总结:深入Java集合学习系列:HashMap的实现原理

 

 

分享到:
评论
1 楼 Nabulio 2016-08-12  
 

相关推荐

    深入Java集合学习系列

    "深入Java集合学习系列:LinkedHashSet的实现原理 - 莫等闲 - ITeye技术网站.mht"将介绍如何在HashSet的基础上添加链表结构以保持元素顺序。 通过这个系列的学习,开发者可以更好地理解Java集合框架的底层机制,...

    尚硅谷-深入Java集合5:LinkedHashSet的实现原理.pdf

    ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse和IDEA这两种企业一线开发环境都使用到了 3.技术讲解更深入、更全面: ·课程共30天,715个知识视频小节,涉及主流Java使用的...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...

    Java集合框架常用集合源代码及其实现

    Java集合框架是Java编程语言中的一个核心部分,它为数据结构和对象的存储、管理和操作提供了统一的接口和实现。这个框架包括了多种类型的集合,如List、Set、Queue和Map,以及它们的各种实现类,如ArrayList、...

    Java 集合学习指南 - v1.1.pdf

    本指南将深入探讨HashMap、HashSet、HashTable、LinkedHashMap、LinkedHashSet、ArrayList、LinkedList、ConcurrentHashMap等主要集合类的实现原理,以及它们在实际应用中的选择与比较。 首先,HashMap是最常用的...

    java的集合帮助文档

    以下是对Java集合学习的一些关键知识点的详细解释: 一、集合接口 1. `List`: 有序的集合,允许重复元素,保持插入顺序。常见的实现类有ArrayList和LinkedList。 2. `Set`: 不包含重复元素的集合,不保证元素顺序。...

    Java集合框架常见面试题夜间阅读版.pdf

    根据提供的信息,我们可以总结并详细解释关于Java集合框架的一些关键知识点。这些知识点主要涉及Java...理解这些概念对于深入学习Java集合框架至关重要,同时对于准备面试也非常有帮助。希望这些信息能够对你有所帮助!

    Java集合容器面试题(2020最新版)陆小马功钟浩.pdf

    了解集合框架的原理、特点、常用类及其实现的内部机制,对于通过Java集合相关的面试题至关重要。通过深入理解集合框架的实现细节,程序员可以在实际开发中做出更加合适的选择,编写出更加高效和可维护的代码。

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    本文将围绕Java集合框架进行详细介绍,包括Collection、List、Set、Map等基本概念及其实现原理。 #### 容器简介 在计算机科学中,容器是一种用来存储数据的对象。Java集合框架提供了一组接口和实现,这些容器用于...

    Java基础学习25.pdf

    通过以上内容的介绍,读者应能更深入地理解Java集合框架中的Set接口及其各种实现的内部原理,并掌握如何在Java编程中使用这些集合来解决实际问题。同时,还应该对并发集合类有所了解,以及如何在多线程环境下安全地...

    java集合类学习汇总

    总结起来,Java集合类的学习不仅仅是了解每个类的基本用法,更关键的是理解它们背后的实现原理和数据结构,以便根据实际需求选择最合适的集合类。通过深入学习和实践,我们可以提高代码的效率和可维护性,更好地应对...

    java集合详细解释

    通过阅读提供的文档"Java集合框架培训参考.doc"和"java集合.pdf",你可以进一步深入了解这些概念和细节,包括具体实现的内部机制、使用技巧以及常见问题的解决方案。在实际编程中,熟练掌握Java集合框架不仅能提升...

    集合 Collection

    - **理解Java集合框架**:深入理解集合框架的设计理念及其内部工作原理。 - **熟练使用java.util包中的相关类与接口进行编程开发**:掌握集合框架提供的各种类与接口,并能在实际项目中灵活运用。 - **改善程序性能*...

    Java集合类源码(摘自jr源码)

    这些类都是Java集合框架的重要组成部分,下面将逐一解析它们的核心概念和工作原理。 1. **ArrayList**:`ArrayList`是基于动态数组实现的列表,它允许在任何位置插入和删除元素。内部通过一个`Object[] elementData...

    Java基础----集合类汇总

    本文将深入探讨Java集合类的汇总,包括List、Set和Map这三大核心接口及其实现类。 首先,让我们从List接口开始。List是一种有序的集合,允许有重复元素,并且支持通过索引来访问元素。ArrayList和LinkedList是List...

    常见的java集合源码分析,以及面试题

    本文将深入剖析Java集合的源码,探讨其内部实现机制,并结合常见面试题,帮助你更好地理解和应用这些知识。 首先,我们从基础开始,Java集合框架主要分为两大类:List(列表)和Set(集合)。List接口包括ArrayList...

    java技术手册:第六版 高清带目录可以复制粘贴

    《Java技术手册:第六版》是一本针对Java编程语言的权威指南,由安道出版社精心翻译,具有高清的页面质量,方便读者...通过深入学习这本手册,开发者不仅可以掌握Java语言的核心知识,还能了解到最新的开发趋势和技术。

    超全Java集合框架讲解.md

    本文将全面解析Java集合框架的关键组成部分及其内部工作原理。 #### 遍历接口 - **`Iterator`**:用于迭代访问(即遍历)`Collection`中的元素。它提供了一种方式,允许用户在不知道集合底层实现的情况下遍历集合...

Global site tag (gtag.js) - Google Analytics