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 ...
随机推荐
- jQuery之筛选方法
1. 父parent.子children.find <div class="yeye"> <div class="father"> &l ...
- Jmeter添加压力机
名词解释: 主控机:启动Jmeter 的机器 负载机:为压力测试提供除主控机之外资源的机器 步骤: 1.先在其他的负载机(另外的电脑)上启动jmeter-server (jmeter-server.b ...
- 各种IE(IE6-IE10)兼容问题一行代码搞定
x-ua-compatible 用来指定IE浏览器解析编译页面的model x-ua-compatible 头标签大小写不敏感,必须用在 head 中,必须在除 title 外的其他 meta 之前使 ...
- java体系中OOP,OOD,OOA分别代表什么含义,以及OA,CRM,ERP
OOP:Object Oriented Programming 面向对象程序设计. OOD:Object Oriented Design 面向对象设计. OOA:Object Oriented Ana ...
- scala学习笔记(8)
1.trait ------------------------------- 如果只有一个trait就使用extends进行扩展,如果是多个,就使用with对生于trait进行扩展 trait lo ...
- 广播即时通信src和des
package 第十二章; import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddres ...
- php 爬虫爱奇艺 视频、内容
,][]; ][]; ][]); ][]); ]); ][]; ][]; ][])) { ][]; }][])) { ][]; } ][]; ; ...
- Site error: the ionCube PHP Loader needs to be installed.解决办法
问题描述: 有些模块的作者为了保护代码而采用ionCube加密的代码,所以这里必须给服务器装上这个php的扩展,就好像以前的zend一样 解决办法: http://bbs.52jscn.com/thr ...
- Java web项目搭建系列之一 Eclipse中新建Maven项目
前提条件: 已经安装好JDK 已经安装好Maven 已经安装好Eclipse 已经安装好Maven插件 在Eclipse中新建Maven项目 [File]→[New]→[Other...] [Mave ...
- [转载]Quartus ii 一些Warning/Eeror分析与解决
我会在此基础上继续添加 原文地址:ii 一些Warning/Eeror分析与解决">Quartus ii 一些Warning/Eeror分析与解决作者:yanppf 注:http:// ...