• JDK8集合类源码解析


    HashSet

    特点:不允许放入重复元素

    查看源码,发现HashSet是基于HashMap来实现的,对HashMap做了一次“封装”。

         private transient HashMap<E,Object> map;
         private static final Object PRESENT = new Object(); //map的value
    

      

    构造函数

       //空的构造函数
        public HashSet() {
            map = new HashMap<>();
        }
        //从集合构建
        public HashSet(Collection<? extends E> c) {
            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);
        }
    

      

    基本操作

     public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
     
    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
     
    public boolean contains(Object o) {
        return map.containsKey(o);
    }
     
    public int size() {
        return map.size();
    }
    

    最佳实践:

          1 HashSet底层就是HashMap,只要理解了 hashmap,HashSet自然就理解了。

          2 HashSet中的数据不可重复

          3 HashSet线程不安全

          4 实际开发中,如果能够预料set的大小,建议优先使用带容量的构造器,好提高性能。

          我的另一篇文章,JDK8集合类源码解析 - HashMap

  • 相关阅读:
    腾讯2面
    腾讯1面
    快手2面
    快手1面
    formData+ajax文件上传
    nginx限流&健康检查
    jvm crash分析
    Spring Cloud Gateway整合Eureka
    k8s-应用部署
    dockerfile-maven plugin自动镜像制作并发布
  • 原文地址:https://www.cnblogs.com/javabigdata/p/7117928.html
Copyright © 2020-2023  润新知