首页 > 编程语言 >JDK 1.8 hashset的源码分析

JDK 1.8 hashset的源码分析

时间:2023-01-18 16:23:38浏览次数:46  
标签:map HashMap JDK hashset HashSet 1.8 源码 哈希 public

 

 

 

 

/**
     * hashset的特点: 无序  唯一 需要比较器 自定义<>中的内容需要实现comparable的接口 推荐外部实现:多态,自定义多种规则
     * 底层实现逻辑: 数组+线性表 哈希表
     * 1. 先计算出hash值 2.通过一个表达式计算出哈希表中的位置 3. 解决哈希冲突
     * 通过hashmap实现hashset
     */
public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    //存放集合的数据
    private transient HashMap<E,Object> map;

    //存放map中的value
    private static final Object PRESENT = new Object();
    
    //空的构造函数 通过实例化hashmap实现
        public HashSet() {
        map = new HashMap<>();
    }
    //复制一个集合中的元素添加到初始化hashset  默认长度是16  加载因子0.75
    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }
    //添加一个元素通过map
       public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
}

标签:map,HashMap,JDK,hashset,HashSet,1.8,源码,哈希,public
From: https://www.cnblogs.com/youran-he/p/17060109.html

相关文章

  • JDK1.8 Vector 源码相关分析
       /**   *底层实现逻辑:数组线性表查询效率高,修改效率低    *所有的操作类同ArrayList但是synchronize线程安全    *效率低    */public......
  • JDK 1.8 LinkedList 关键代码分析 重要属性和add
       /**   *有序(输入有序),不唯一    *底层实现是双向链表   *易修改,不易查询    */publicclassLinkedList<E>   extendsAbstractSequenti......
  • JDK 1.8 ArrayList源码分析 关键代码
    /***1.ArrayListAbstractList中实现了List接口冗余,作者已经承认*2.RandomAccess可以随机访问,标记接口***/publicclassArrayList<E>extendsAbstractList<E> ......
  • JDK8的新特性总结
    文章目录1.接口默认方法实现2.新增Base64加解密API2.1.Base64编码简介2.2.JDK1.8之前Base64的API2.3.JDK1.8之后Base64的API3.时间日期处理类3.1.LocalDate常用......
  • 视频直播app源码,Android TextView省略号代替多出数据
    视频直播app源码,AndroidTextView省略号代替多出数据1、xml实现 android:maxLines=”1”android:ellipsize=”end”<TextView    android:id="@+id/name"  ......
  • jdk环境变量
    a.首先要打开系统环境变量配置的页面。具体操作是:桌面上找到“此电脑”,然后右键“属性”。b.c.在新建页面输入"变量名"位JAVA_HOME,输入“变量值”为你安装的JDK路径d.......
  • 【学习日志】Cglib动态代理和JDK动态代理的对比
     CglibJDKProxy实现方式生成被代理类的子类通过被代理类实现的接口+反射速度慢(曾经快于JDKProxy,但JDKProxy几次迭代后逐渐落后)快限制被代理类不......
  • 卸载安装jdk
    卸载jdk1.删除java安装目录2.删除java_home3.删除path下关于java的目录4.Java-version安装jdk1.百度搜索jdk8,找到下载地址2.同意协议3.下载电脑对应的版本4.双击......
  • 学习笔记——Servlet底层源码分析;Servlet接口;ServletConfig接口;
    2023-01-17 一、Servlet底层源码分析1、Servlet结构图   说明:HttpServlet继承了GenericServlet类,GenericServlet实现了“ServletConfig”和“Servlet”两个接口,......
  • Cesium源码之Label(二)
    我们查看Cesium源码时,有时会发现源码中有大量的includeStart开头的注释,如下图所示。这里面大多是调试信息,当使用gulp打包时,removePragmas参数设置为true,则会删除includeSt......