`

LinkedHashSet深入学习

    博客分类:
  • java
 
阅读更多
1.    LinkedHashSet概述:

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

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



2.    LinkedHashSet的实现:

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

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

Java代码  收藏代码

    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提供的构造方法如下,该方法为包访问权限,并未对外公开。

Java代码  收藏代码

    /**
         * 以指定的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,以很简单明了的方式来实现了其自身的所有功能。

转自http://zhangshixi.iteye.com/blog/673319
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    深入学习java源码-Java-Collection-Framework:java集合框架详解,这里有集合框架的深入学习并且贴出了部分重要

    在深入学习Java源码时,理解并掌握Java集合框架至关重要。这个框架包括接口、类和算法,它们使得数据结构如数组、链表、队列、栈等的使用变得简单而高效。 首先,我们来看一下集合框架的基础接口。`Collection`是...

    深入Java集合学习系列

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

    Java基础学习24.pdf

    Java编程语言的基础学习是成为Java开发者的必要步骤,其中对数据结构的理解至关重要,特别是Map接口的实现类。本文将深入探讨Java中Map的几...通过不断的实践和深入学习,你将能够更快地在Java开发领域找到自己的位置。

    java从入门到深入

    本课程“Java从入门到深入”旨在为初学者提供全面且系统的Java学习路径,适合对Java有浓厚兴趣并立志深入研究的爱好者。 1. **Java基础知识** - **环境配置**:首先,学习Java需要安装Java Development Kit (JDK)...

    Java集合API用例学习

    以上就是关于“Java集合API用例学习”的核心内容,通过深入学习和实践,你将能够更好地理解和运用这些集合,解决各种编程挑战。记得在实践中不断探索,结合官方文档和实际项目,逐步完善你的Java技能树。

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

    在深入学习集合框架的基础上,我们还可以进一步探讨它们的应用,如如何使用LinkedHashMap实现一个LRU(最近最少使用)缓存。LRU是一种用于管理缓存淘汰策略的算法,它保证了最先被使用的数据最不容易被淘汰。 最后...

    在工作中java学习资料学习笔记

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的库而闻名。...以上知识点都是“在工作中Java学习资料学习笔记”可能涵盖的内容,通过深入学习和实践,开发者可以更好地应对项目中的各种挑战。

    java学习集合.rar

    Java学习集合是一个面向初学者的资源包,涵盖了Java Web开发的基础知识。这个压缩包由黄诗博在2019年1月27日创建,旨在帮助...通过深入学习和实践这个资料包中的内容,初学者可以逐步建立起扎实的Java Web开发技能。

    深入理解Java集合框架.zip

    Java集合框架是Java编程语言中不可或...通过深入学习这个压缩包中的内容,开发者可以掌握Java集合框架的高级用法,提升编程效率,更好地应对复杂的数据处理任务。无论是面试还是实际项目开发,这些知识都是必不可少的。

    Java类集,整理总结的笔记

    Java类集是Java编程语言中的核心部分,它包括了大量的接口和类,用于处理各种数据结构、集合、映射以及I/O操作。这份“Java类集”笔记是对这一关键...通过深入学习并实践其中的内容,可以有效地提高代码质量和效率。

    Java所有课程超全学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年发布。它以其“一次编写,到处...通过深入学习和实践,可以掌握Java编程技能,为进一步的软件开发或系统设计打下坚实的基础。

    Java面试总结,Redis宕机数据丢失解决方案,看完这篇彻底明白了.docx

    * 从基础知识开始学习,然后逐步深入到高级知识 3. 使用面试题来检测自己的学习成果 * 使用面试题来检测自己的学习成果,查找知识漏洞和不足 本文涵盖了Java面试的多个方面,包括Java基础知识、多线程和并发编程...

    Java集合面试题 52道.pdf

    Java集合是Java编程语言提供的一套用于数据存储和操作的接口与类的集合。根据Java集合框架,集合主要可以分为两大类:Collection...因此,深入学习和理解Java集合框架,对于提高Java开发的实战能力有着直接的积极影响。

    java集合类学习汇总

    Java集合类是Java编程语言中用于存储对象的重要工具,它们提供了灵活的数据组织方式,使得开发者可以高效地管理和操作数据。...通过深入学习和实践,我们可以提高代码的效率和可维护性,更好地应对各种编程挑战。

    Java杂集

    【Java杂集】这个主题涵盖了Java编程语言中的各种实用技巧、工具使用以及源码解析,旨在帮助开发者深入理解和应用Java技术。...通过深入学习和实践,可以更好地应对各种开发挑战,写出更加高效、健壮的Java程序。

    一个扑克游戏,用于Java集合框架练习.zip

    在这个“扑克游戏”项目中,我们可以深入学习和理解Java集合框架在实际游戏开发中的应用。本篇将围绕这个项目,详细探讨Java集合框架中的各种类和接口,以及它们如何在游戏逻辑中发挥作用。 首先,项目名称“Poker...

    Java基础学习18.pdf

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。为了在Java领域找到一份工作,掌握其基础知识至关重要。...通过深入学习和实践,你将具备扎实的Java技能,为找工作打下坚实的基础。

    11.集合框架001-Collection接口17-19

    在"18-集合框架018-LinkedHashSet"和"19-集合框架019-TreeSet"的视频中,可能深入讨论了这两个类的实现原理、操作效率以及使用场景,并通过实例演示了它们的用法。 总的来说,`Collection`接口及其子接口、实现类...

    Java集合类(Collection)学习

    在这个Java集合类的学习资料中,我们将深入探讨`Collection`以及与其相关的`TreeMap`、`Set`和`List`等概念。 首先,我们从`Collection`接口开始。`Collection`接口是`java.util`包下的核心接口,它定义了集合的...

Global site tag (gtag.js) - Google Analytics