zoukankan      html  css  js  c++  java
  • 第六章 HashSet源码解析

    6.1、对于HashSet需要掌握以下几点

    • HashSet的创建:HashSet()
    • 往HashSet中添加单个对象:即add(E)方法
    • 删除HashSet中的对象:即remove(Object key)方法
    • 判断对象是否存在于HashSet中:containsKey(Object key)

     注:HashSet没有获取单个对象的方法,需要使用iterator

    6.2、构建HashSet

     源代码:

        //HashSet底层数据结构:通过hashmap的key不可重复的原则,使得存放入HashSet中的值不重复
        private transient HashMap<E, Object> map;
        //默认的hashmap的value
        private static final Object PRESENT = new Object();
        /**
         * 可存放16个元素
         */
        public HashSet() {
            map = new HashMap<E, Object>();
        }
        /**
         * 指定hashset的容量和负载因子
         */
        public HashSet(int initialCapacity, float loadFactor) {
            map = new HashMap<E, Object>(initialCapacity, loadFactor);
        }
        /**
         * 指定hashset的容量
         */
        public HashSet(int initialCapacity) {
            map = new HashMap<E, Object>(initialCapacity);
        }
    View Code

    注:HashSet的底层是HashMap,其依靠HashMap的key不可重复,来保证将来加入到HashSet中的元素也不重复(会将元素作为key放到hashmap中,参照6.3)。

     

    6.3、add(E e)

    源代码:

    add(E e)

        /**
         * 往set中添加值
         */
        public boolean add(E e) {
            //查看hashmap的put方法,若覆盖已有key的旧值,会返回旧值;若没有相应的key则返回null
            return map.put(e, PRESENT) == null;
        }
    View Code

    注意:这里调用了HashMap的put(K key, V value)

    6.4、remove(Object key)

    源代码:

        /**
         * 删除指定元素
         */
        public boolean remove(Object o) {
            return map.remove(o) == PRESENT;
        }
    View Code

    注:这里调用了HashMap的remove(Object key)

    6.5、contains(Object key)

    源代码:

        /**
         * set中是否包含指定元素
         */
        public boolean contains(Object o) {
            return map.containsKey(o);
        }
    View Code

    注意:这里调用了HashMap的containsKey(Object key)

     

    总结:

    • HashSet底层就是HashMap
    • 其依靠HashMap的key不可重复,来保证将来加入到HashSet中的元素也不重复(会将元素作为key放到hashmap中)
    • HashSet线程不安全

    HashMap源码解析:

    http://www.cnblogs.com/java-zhao/p/5106189.html

  • 相关阅读:
    更改文件、图片名称思路,我们的名字在以后添加_2等待
    UIStepper使用的具体解释的控制
    ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)
    SDE ST_Geometry SQL st_intersects查询很慢的解决方法
    通过SQL直接插入、修改ArcGIS SDE空间表中的数据
    使用POI读写word docx文件
    Weblogic读不到Word文件
    POI写Word换行
    使用POI转换word doc文件
    POI生成Web版Word文件
  • 原文地址:https://www.cnblogs.com/java-zhao/p/5110953.html
Copyright © 2011-2022 走看看