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

从源码学习HashSet和TreeSet

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

从源码学习HashSet和TreeSet

HashSet 概述

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

HashSet hashSet=new HashSet();

展示源码

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

add方法

public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

本质上是将数据保存在HashMap中,key就是我们添加的内容,value就是我们定义的一个Obj对象

特点

底层数据结构是 哈希表,HashSet的本质是一个"没有重复元素"的集合,它是通过HashMap实现的。HashSet中含有一个HashMap类型的成员变量map,在HashSet中操作函数,实际上都是通过map实现的。所以了解了HashMap就了解了HashSet。

TreeSet 概述

基于TreeMap的 NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator进行排序,具体取决于使用的构造方法。

TreeSet ts=new TreeSet();

展示源码

public class TreeSet extends AbstractSet
    implements NavigableSet, Cloneable, java.io.Serializable
{
    
    private transient NavigableMap m;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

    
    TreeSet(NavigableMap m) {
        this.m = m;
    }

    
    public TreeSet() {
        this(new TreeMap());
    }
 public boolean add(E e) {
        return m.put(e, PRESENT)==null;
    }

本质是将数据保存在TreeMap中,key是我们添加的内容,value是定义的一个Object对象。

特点
  1. TreeSet 是一个有序的并且可排序的集合,它继承于AbstractSet抽象类,实现了NavigableSet, Cloneable, java.io.Serializable接口。
  2. TreeSet是基于TreeMap实现的。TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。同样的了解了TreeMap就了解了TreeSet。

因此,HashSet和TreeSet的学习重点在于HashMap和TreeMap。

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

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

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