• 集合之HashSet源码解析


    hashSet 类图:

    hashset 本质上为hashMap 的key, 常用于集合去重。

    构造函数:

    public HashSet() {
        map = new HashMap<>();
    }
    
    public HashSet(Collection<? extends E> c) {
        // (int) (c.size()/.75f) + 1 避免扩容
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }
    
    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }
    
    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }
    
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor); 
    }

    添加单个元素: value为PRESENT

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

     添加多个元素:

     public boolean addAll(Collection<? extends E> c) {
            boolean modified = false;
            for (E e : c)
                if (add(e))
                    modified = true;
            return modified;
        }

    移除单个元素:

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

    全部清除:clear

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

    转化为数组:

    @Override
    public Object[] toArray() {
        return map.keysToArray(new Object[map.size()]);
    }
    
    @Override
    public <T> T[] toArray(T[] a) {
        return map.keysToArray(map.prepareArray(a));
    }

    查找是否包含某个元素:

    public boolean contains(Object o) {
        return map.containsKey(o);
    }
  • 相关阅读:
    Java 8 Stream流编程学习
    AMD R5 2400G插帧教程
    GCC编译Win图形程序不显示控制台方法
    Linux程序守护脚本
    远程桌面软件RDCMan汉化版
    Java基础知识点
    Java的String类常用方法
    Apache Commons 相关工具类使用
    基于OpenCV的双目视觉匹配测距系统
    异想家Ubuntu安装的软件
  • 原文地址:https://www.cnblogs.com/wlong-blog/p/14882814.html
Copyright © 2020-2023  润新知