JDK1.8 HashSet
来源:互联网 发布:淘宝平均停留时长 编辑:程序博客网 时间:2024/06/01 07:25
原理:
HashSet实现了Set接口,但是内部实现却是基于HashMap的。它的原理就是添加到集合里的值或者对象都成为了HashMap的key. 而HashMap有了Key之外,值怎么办呢。HashSet默认提供了一个供所有key共享的一个Object对象PRESENT.什么意思呢?下面会分析到。
也正是HashSet是基于HashMap的,那么我们知道HashMap的key允不允许重复,是不允许的嘛,判断依据equals是否相等,而且hashCode是否一样。既然HashMap的key不允许相等,就决定了添加到HashSet的值是不能相等的。
HashSet重要的属性
privatetransient HashMap<E,Object> map;
//提供了一个供所有key共享的一个Object对象
privatestatic final ObjectPRESENT =new Object();
构造方法:
public HashSet() {
map = newHashMap<>();
}
public HashSet(Collection<?extends E> c) {
map = newHashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
publicHashSet(int initialCapacity,floatloadFactor) {
map = newHashMap<>(initialCapacity, loadFactor);
}
HashSet重要方法
publicboolean add(E e) {
return map.put(e,PRESENT)==null;
}
我们每添加一个元素E到HashSet,其实就是在HashMap里面存了一个
<KEY=E,VALUE= PRESENT>
public Iterator<E> iterator() {
return map.keySet().iterator();
}
publicboolean remove(Object o) {
return map.remove(o)==PRESENT;
}
publicint size() {
return map.size();
}
publicboolean contains(Object o) {
return map.containsKey(o);
}
从上面的方法得知,其实就是对HashMap进行的一些操作而已。
HashSet和 HashMap有啥异同
- HashSet实现的是Set接口;HashMap实现的是Map接口
- HashSet只是存储单个元素;HashMap存储的是键值对
- HashSet的值允许为空,但只允许一个,添加再多的null对象,其实只不过覆盖了之前的那个对象而已;HashMap允许键值为空,但是键只允许一次
- JDK1.8 HashSet
- HashSet源代码分析(JDK1.8)
- JDK1.8源码学习之HashSet.java
- HashSet源码探讨(基于JDK1.8)
- jdk1.7之HashSet
- 为什么JDK1.8中HashSet集合好像是有序的?
- HashSet源码分析(基于JDK1.6)
- HashSet及LinkedHashSet源码分析(基于JDK1.6)
- jdk1.8
- jdk1.8
- Jdk1.8
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性
- 集(8-HashSet、SortedSet)
- HashSet
- Hashset
- mysql blog
- 严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start componen
- Eclipse 关联jar包乱码
- Lua 基本语法
- excel比较两列不同
- JDK1.8 HashSet
- linux环境下编写shell脚本启动和关闭jar包服务程序
- 典型负反馈放大电路
- 顺序栈
- 项目中类显示红色下划线
- ecshop二次开发--百度地图
- 安卓易学,爬坑不易—腾讯老司机的RecyclerView局部刷新爬坑之路
- webx-URIBroker
- 机器学习之由wavenet涉及到的基础知识(补充下学习ing)