`

读HashSet源码

阅读更多
//先看构造函数
 public HashSet() {
        map = new HashMap<>();
    }

public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

//这个构造方法不是public的,仅用于LinkedHashSet.
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }


//新增 PRESENT代表一个对象(虚拟对象)
 public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

 public boolean contains(Object o) {
        return map.containsKey(o);
    }

 public int size() {
        return map.size();
    }

public boolean isEmpty() {
        return map.isEmpty();
    }

 public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

public void clear() {
        map.clear();
    }

public Iterator<E> iterator() {
        return map.keySet().iterator();
    }


/**
总结:HashSet低层使用HashMap实现,通过HashMap的key不允许重复来保证元素不能重复。
另外LinkedHashSet继承了HashSet.低层使用使用的LinkedHashMap实现。可以保证Set集合在插入时候的顺序。
*/
分享到:
评论

相关推荐

    JDK1.8源码完整版

    Lambda表达式是JDK1.8的一个重要特性,它简化了对匿名内部类的使用,使得代码更加简洁和易读。通过使用 Lambda,我们可以将函数作为参数传递,或者将函数直接定义为方法体。这在处理集合操作时尤其有用,配合Stream ...

    数据结构与问题求解——java语言描述 源码

    在Java中,这些数据结构可以通过内置类如ArrayList、LinkedList、Stack、Queue、HashSet和HashMap等来实现。例如,`Graph.java`文件很可能包含了图的实现,可能包括邻接矩阵或邻接表等表示方法,以及图的遍历算法如...

    C#课程设计源码

    首先,C#(读作"C sharp")是一种面向对象的编程语言,由微软公司为.NET框架开发,广泛应用于Windows应用程序、Web应用程序、游戏开发(尤其是Unity引擎)等领域。它具有类型安全、性能高效、可维护性强等特点。 1....

    C-sharp源码100例

    C#(读作"C sharp")是由微软公司开发的一种面向对象的编程语言,它被设计用于构建Windows应用程序、网络服务、移动应用以及游戏等。C#语言以其简洁、类型安全和性能高效的特点,深受开发者的喜爱。它吸收了C++和...

    毕向东 笔记源码

    源码,即编程语言的原始代码,是程序员用人类可读的形式编写的程序,未经过编译器转换成机器语言。在Java中,源代码以.java文件的形式存在。通过阅读和分析源码,我们可以了解程序的设计思路、实现方法以及编程技巧...

    Samplelq_java_pinek7w_源码.zip

    在Java编程领域,源码是程序设计的基础,它由程序员编写,用人类可读的语言描述了软件如何运行和处理数据。通过分析源码,我们可以学习到许多关于编程技巧、设计模式以及特定问题的解决方案。 【描述】"Samplelq_...

    易语言源码去掉重复文本比较.7z

    易语言的核心理念是“易学、易用、易读、易写”。它的语法结构直观,采用汉字命名函数和变量,如“打开文件”、“读取文本”等,使得初学者能够快速理解代码含义。了解易语言的基本语法和常用命令是使用此源码的...

    Java基础学习25.pdf

    ### HashSet源码分析 1. **构造器**:HashSet提供了多个构造器,可以创建默认容量的HashSet,指定容量和负载因子的HashSet,或者带有一个初始集合的HashSet。 2. **add(E e)**:向HashSet添加元素时,实际上是将...

    Java核心技术 第9版 卷1+卷2+源码 第四部分

    ArrayList、LinkedList、HashSet、HashMap等是常用的实现类。 5. **输入/输出(I/O)**:Java的I/O流系统允许读写文件、网络通信和其他数据源。InputStream、OutputStream、Reader、Writer等是基础类,而...

    C#高质量代码学习建议PDF+源码案例

    1. **代码规范**:遵循一定的编码规范,如命名规则(PascalCase或camelCase),注释标准,以及统一的空格和缩进,可以使代码更易读,团队合作更顺畅。 2. **设计模式**:了解并熟练运用常见的设计模式(如工厂模式...

    编写高质量代码:改善Java程序的151个建议pdf和源码 高清

    10. **源码分析**:书中包含的源码分析部分,可以帮助读者更好地理解实际项目中如何应用上述原则和技巧,提升实战能力。 总之,《编写高质量代码:改善Java程序的151个建议》是一本实用的Java编程指南,无论你是...

    数据结构与算法分析 Java语言描述 读书笔记

    - 源码分析:通过阅读Java标准库中数据结构和算法的源码,可以深入理解其实现原理和优化技巧。 - 工具辅助:使用IDE(如Eclipse、IntelliJ IDEA)的调试功能,可以帮助分析和验证算法的执行过程。 6. **实践应用*...

    JAVA面向对象编程(孙卫琴)读书笔记(三)

    - 集合框架是Java中用于存储和操作对象的工具,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)。 - 泛型的引入增强了集合框架的类型安全,防止了运行时类型转换异常...

    java实战源代码

    3. **集合框架**:Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。通过源码,你可以学习如何有效地存储和操作数据。 4. **异常处理**:Java异常处理是通过...

    thinkinjava源码-thinkInJava:java编程思想

    4. **集合框架**:Java的集合框架包括ArrayList、LinkedList、HashSet、HashMap等,源码将展示它们的使用方法和性能差异。 5. **泛型**:泛型为编写类型安全的代码提供了便利,源码中会体现泛型类和泛型方法的应用...

    疯狂Java讲义第二版配套光盘

    在Java编程中,源码是程序员用人类可读的语言编写的程序文本,它被编译成计算机可以执行的机器代码。通过查看和分析这些源码,学习者可以理解作者如何应用Java语法、设计模式以及最佳实践来解决问题。源码中的注释...

    java 记录

    在Java编程中,源码是程序的基本组成部分,它是由开发者编写的用人类可读的语言描述计算机执行任务的文本文件。理解并阅读源码对于学习任何编程语言都至关重要。Java的源代码通常以.java为扩展名,并通过Java编译器...

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

    它旨在引导学习者通过阅读和分析JDK源码来深入理解集合类的工作原理,从而在日常编程工作中能够更合理地使用和选择合适的集合实现。同时,本指南也强调了集合框架在Java编程中的广泛应用,比如在保存临时数据、管理...

    Java concurrency集合之CopyOnWriteArraySet_动力节点Java学院整理

    这个集合类继承自AbstractSet,但是不同于HashSet,它的内部实现是基于CopyOnWriteArrayList,而不是哈希表。这使得CopyOnWriteArraySet在并发环境下的性能表现有其独特之处。 CopyOnWriteArraySet的数据结构与...

    Java_jihe2.rar_java集合

    - `CopyOnWriteArrayList`和`CopyOnWriteArraySet`:适用于读多写少的场景,线程安全。 7. **集合操作** - `add()`、`remove()`:添加和移除元素。 - `contains()`、`equals()`:检查元素是否存在或集合是否相等...

Global site tag (gtag.js) - Google Analytics