HashSet 源码分析
2024-10-07 08:55:09
HashSet
1)HashSet 是基于 HashMap 的 Set 接口实现,元素的迭代是无序的,可以使用 null 元素。
创建实例
/**
* HashSet基于HashMap实现
*/
private transient HashMap<E,Object> map;
// 用于在支持的 HashMap 中关联键的傀儡对象
private static final Object PRESENT = new Object();
/**
* 创建一个初始容量为 16,加载因子为 0.75 的 HashMap 支持的 HashSet
*/
public HashSet() {
map = new HashMap<>();
}
/**
* 创建一个初始容量为 initialCapacity,加载因子为 loadFactor 的 HashMap 支持的 HashSet
*/
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
/**
* 创建一个初始容量为 initialCapacity,加载因子为 0.75 的 HashMap 支持的 HashSet
*/
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
/**
* 创建一个初始容量为 initialCapacity,
* 加载因子为 loadFactor 的 LinkedHashMap 支持的 HashSet,
* 主要被 LinkedHashSet 使用。
*/
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
其他方法
/**
* 获取 HashSet 中所有元素的乱序迭代器
*/
public Iterator<E> iterator() {
return map.keySet().iterator();
}
/**
* 获取 HashSet 中元素的总数
*/
public int size() {
return map.size();
}
/**
* HashSet 是否为空
*/
public boolean isEmpty() {
return map.isEmpty();
}
/**
* 判断此 HashSet 中是否包含指定的值
*/
public boolean contains(Object o) {
return map.containsKey(o);
}
/**
* 如果元素不存在,则新增【返回值为 null】,返回值为 true;
* 否则不对 HashSet 做修改,返回值为 false【PRESENT == null】。
*/
public boolean add(E e) {
return map.put(e, HashSet.PRESENT)==null;
}
/**
* 从 HashSet 中移除指定的元素
*/
public boolean remove(Object o) {
return map.remove(o)==HashSet.PRESENT;
}
/**
* 清空 HashSet
*/
public void clear() {
map.clear();
}
最新文章
- 读书笔记--SQL必知必会05--高级数据过滤
- CSS 概念 &; 作用
- [BI基础] 一些不得不了解的概念
- docker 容器数据管理
- 使用JSP处理用户注册和登陆
- TeamViewer 远程时出现:现在无法捕捉画面。这可能是由于恰的用户切换或远程桌面会话断开、最小化
- Oracle开始从Java运行时中移除JAR包
- HDU4545+计算日期
- Learn LIBSVM---a practical Guide to SVM classification
- 简单 TCP/IP 服务功能
- 12C RMAN 备份参考
- HashMap的存储原理
- mybatis批量插入
- python一个命令开启http服务器
- asp.netmvc部署到linux(centos)
- linux 应用和发展
- Day6 Pyhton基础之文件操作(五)
- leetcode958二叉树的完全检验-java
- layui数据表格使用(一:基础篇,数据展示、分页组件、表格内嵌表单和图片)
- LNMP简要配置
热门文章
- 数据库允许空值(null),往往是悲剧的开始 (转)
- Paper Reading_ML for system
- tortoise svn回滚常用命令
- hdu 4633 Who&#39;s Aunt Zhang(polya+逆元)
- Codeforces 932 数组环构造 树上LCA倍增
- AtCoder Beginner Contest 088 D Grid Repainting
- linux运维、架构之路-xtrabackup
- 虚拟机安装Windows系统,再安装orcale
- 自动配置/切换/查看JDK环境变量
- Java中日期