HashSet 源码分析
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();
}
HashSet 源码分析的更多相关文章
- HashSet源码分析
在java集合中有一种集合Set(集),他有两个实现类,分别是HashSet,TreeSet.下面仔细分析HashSet源码. 看了HashSet的源码就会发现HashSet的底层实现是利用HashM ...
- 死磕 java集合之HashSet源码分析
问题 (1)集合(Collection)和集合(Set)有什么区别? (2)HashSet怎么保证添加元素不重复? (3)HashSet是否允许null元素? (4)HashSet是有序的吗? (5) ...
- 【Java入门提高篇】Day26 Java容器类详解(八)HashSet源码分析
前面花了好几篇的篇幅把HashMap里里外外说了个遍,大家可能对于源码分析篇已经讳莫如深了.别慌别慌,这一篇来说说集合框架里最偷懒的一个家伙——HashSet,为什么说它是最偷懒的呢,先留个悬念,看完 ...
- HashSet源码分析:JDK源码系列
1.简介 继续分析源码,上一篇文章把HashMap的分析完毕.本文开始分析HashSet简单的介绍一下. HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承 ...
- java.util.HashSet源码分析
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java. ...
- JAVA的HashSet源码分析
一.HashSet概述 HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null元素. 二.HashS ...
- Java集合之HashSet源码分析
概述 HashSet是基于HashMap来实现的, 底层采用HashMap的key来保存数据, 借此实现元素不重复, 因此HashSet的实现比较简单, 基本上的都是直接调用底层HashMap的相关方 ...
- HashSet源码分析 jdk1.6
Set的特点:Set元素无顺序,且元素不可以重复. 1.定义 public class HashSet<E> extends AbstractSet<E> implements ...
- HashSet源码分析2
package com.test1; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public ...
- HashSet源码分析1
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class SetTest { pu ...
随机推荐
- python day1-requests
一.什么是requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库. 相对于urllib库(自带,无需手动安装)而言, ...
- HeidiSQL
相关链接 https://www.heidisql.com/ - 官网 https://github.com/HeidiSQL/HeidiSQL - 源码 参考 ...
- Markov Chain Monte Carlo Simulation using C# and MathNet
Math.Net Numerics has capability to conduct Markov Chair Monte Carlo simulations, yet the document i ...
- MySQL使用explain时各字段解释
1.id select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 三种情况: (1)id相同,执行顺序由上至下 id相同,执行顺序由上至下 此例中 先执行where 后的 ...
- Django模型层1
Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 ...
- Linux--shell函数--08
1.函数介绍 为了避免代码的重复使用,我们一般通过函数编写代码块,而这一个代码块用来实现某种功能:且这个功能在后面的代码中会重复使用. 2.函数的语法格式: [ function ] 函数名 [ ( ...
- Centos 7 Mysql 最大连接数超了问题解决
错误:Can not connect to MySQL server. Too many connections -mysql 1040错误 这是因为对 Mysql 进行访问,未释放的连接数已经达到 ...
- 个人作业 项目alpha版本测试
课程:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求:https://edu.cnblogs.com/campus ...
- VB学习一
一.基础函数 CStr() 函数转化表达式为一个字符串 Trim() 移除字符串两侧的空白字符串或者其他预定义字符 成功:返回删除后的字符串 失败:返回空字符串 VBA.Mid(string,star ...
- Numpy使用方法
地址:http://www.cnblogs.com/xinchrome/p/5043480.html 另附Stanford的Numpy Tutorial地址:http://cs231n.github. ...