zoukankan      html  css  js  c++  java
  • Java中的Collection和Map(四)--Set体系

      我们都知道,除了我们常用的List集合还存在Set 集合,Set集合中我们常用的有 HashSet 、TreeSet、LinkedHashSet。下面我们来看下他们底层的实现:

    1、HashSet

      HashSet 底层是hash表结构的集合。

      构造方法:

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

      我们在通过构造方法创建一Set 集合的时候,实际上底层创建了一Map 集合。

      add(E e) 方法:

     public boolean add(E e) {
            return map.put(e, PRESENT)==null;
        }
    private static final Object PRESENT = new Object(); //

      如果这里你忘记了Map 类的put 实现,可以去翻看一下 Map的put方法实现--Java中的Collection和Map(三) 地址:http://www.cnblogs.com/gaohuiqian/p/5227014.html。

      从这里我们可以看出,Set 集合是利用map 集合来进行存储的,key 存放Set 中的元素,Value 存放的是Object 对象。map 集合中的key是不可以重复的,这从侧面也说明了Set 集合能去重的原因。而且Map 集合中key 所需具备的一些条件,也正是Set 集合存放元素的条件。

    2、TreeSet

      TreeSet底层是树形结构:

      构造方法:

    public TreeSet() {
            this(new TreeMap<E,Object>());
        }
    

      由此我们可以看出TreeSet 底层是依据TreeMap 实现的。

      add(E e) 方法

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

    3、LinkedHashSet

      LinkedHashSet 底层依赖LinkedHashMap实现,它是HashSet 的子类:

      构造方法:

    public LinkedHashSet() {
            super(16, .75f, true);
        }
    
     HashSet(int initialCapacity, float loadFactor, boolean dummy) {
            map = new LinkedHashMap<>(initialCapacity, loadFactor);
        }
    

      在LinkedHashSet 的构造方法中调用了 HashSet 的构造方法。 创建了一个LinkedHashMap。

  • 相关阅读:
    提醒你一下, 你真的很垃圾, 创建一个maven 的web 项目都忘记了
    java web 项目中基础技术
    java 构造函数
    分布式简介
    RabbitMq 深入了解
    JS正则表达式验证数字非常全
    mui返回上个页面并刷新数据
    Windows环境下IOS APP打包上传AppStore详细流程
    crontab 详细用法 定时任务
    Linux epoll 源码注释
  • 原文地址:https://www.cnblogs.com/gaohuiqian/p/5224664.html
Copyright © 2011-2022 走看看