• 一天一个类,一点也不累之HashSet


    最近忙着一个小项目结题,故没能按时完成【一天一个类,一点也不累】,还好项目优秀,算是对自己一点点的安慰和鼓励。~~~

    今天要说的是HashSet

    既然是继承自Set,那么就必须有Set的一些属性,比如不能容许有相同(equals)元素的存在.阿门~~ 他也容许有null元素的存在。at most one null element。

    【需要注意】 Note that this implementation is not synchronized.  这个也不是线程安全的。

    同样感谢,官方给我们提供了线程安全的实现方法。

     Set s = Collections.synchronizedSet(new HashSet(...));

    【查看源码才知道--》】原来HashSet内部的实现是使用HashMap。  HashMap还没讲到,敬请期待。。。。

    还是看看他的一些方法:

    1、构造方法

      HashSet()

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

      HashSet(int initialCapacity) //提供指定初始大小的Set集合

    1     public HashSet(Collection<? extends E> c) {
    2         map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
    3         addAll(c);
    4     }

      发现如果使用其他容器来实现HashSet,实现之后的大小是原来的3/4+1 ,16二者的最大值

      HashSet(Collection<? extends E> c) 

      HashSet(int initialCapacity, float loadFactor)//指定初始大小,和负载因子(大于0)

    2、迭代器

      因为HashSet使用HashMap来实现的,在返回迭代器的时候,是返回keySet.iterator().

      既然这样,问题来了,HashSet只是使用了HashMap中的Key,那他的Value呢???

      请看下面的add方法

    3、add

       1 public boolean add(E e) {

      2 return map.put(e, PRESENT)==null;

      3 } 

      添加一个元素,只是在将该元素放入Map的key,value部分使用了一个叫做PRESENT的礼物,who is  PRESENT??

      private static final Object PRESENT = new Object();  定义了一个简单的Object.

    4、remove如何实现??

      既然在add中的value== PRESENT

      那就好办了!~~~~

      public boolean remove(Object o) {

        return map.remove(o)==PRESENT;
      }

      so smart~~~

    【注】

    在java语言中,通过负载因子(load factor)来决定何时对散列表进行再
    散列.例如:如果负载因子是0.75,当散列表中已经有75%的位置已经放满,
    那么将进行散列.
    负载因子越高(越接近1.0),内存的使用率越高,元素的寻找时间越长.
    负载因子越低(越接近0.0),元素的寻找时间越短,内存浪费越多.

     

  • 相关阅读:
    spring boot activiti 整合
    接管SpringBoot对Activiti的数据源自动配置
    springboot集成activiti6.0多数据源的配置
    activiti 如何使用database前缀来区分activiti数据库和业务数据库
    SpringBoot开发案例之整合Activiti工作流引擎
    Activiti6简明教程
    springboot activiti 配置项详解
    Activiti搭建
    spring boot 2.0 报错:“jdbcUrl is required with driverClassName.” 解决办法!
    TCP的可靠传输机制(简单好理解:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制)
  • 原文地址:https://www.cnblogs.com/plxx/p/4467057.html
Copyright © 2020-2023  润新知