企业为什么做网站,网络营销工具分析,项目网课商城,一个大学网站做的好坏于否的标准最近忙着一个小项目结题#xff0c;故没能按时完成【一天一个类#xff0c;一点也不累】#xff0c;还好项目优秀#xff0c;算是对自己一点点的安慰和鼓励。~~~ 今天要说的是HashSet 既然是继承自Set#xff0c;那么就必须有Set的一些属性#xff0c;比如不能容许有相同…最近忙着一个小项目结题故没能按时完成【一天一个类一点也不累】还好项目优秀算是对自己一点点的安慰和鼓励。~~~ 今天要说的是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/41 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的keyvalue部分使用了一个叫做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),元素的寻找时间越短,内存浪费越多. 转载于:https://www.cnblogs.com/plxx/p/4467057.html