HashSet与ArrayList的最主要区别在于,在HashSet中的元素不会出现重复的。其内部实现机制如下:
为了保证在HashSet中出现重复元素,实际上,HashSet是通过一个内部的HashMap来实现元素唯一性。
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
/**
* Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
* default initial capacity (16) and load factor (0.75).
*/
public HashSet() {
map = new HashMap<>();
}
/**
* Constructs a new set containing the elements in the specified
* collection. The <tt>HashMap</tt> is created with default load factor
* (0.75) and an initial capacity sufficient to contain the elements in
* the specified collection.
*
* @param c the collection whose elements are to be placed into this set
* @throws NullPointerException if the specified collection is null
*/
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
在上面代码中可以看出,在HashSet初始化时,如果初始化集合为空,则会初始化一个空的HashMap,也就是初始容量为16,初始装载因子为0.75的HashMap。
如果初始化集合不为空,则会初始化一个初始装载因子为0.75的HashMap。
HashSet中的所有的元素都被作为key值,以一个初始化的变量PRESENT作为值来构建它内部的HashMap。
HashSet继承自AbstractSet抽象类和Set接口。
分享到:
相关推荐
bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar压缩文件
这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JDK是学好Java的第一步。不管是你要学习java...
JDK7源码 包含rt.jar包下的 sun包源码 sun.security包等源码
众所周知java.exe是java class文件的执行程序这是我精心分析后还原的源代码已经在JDK 1.7_03测试通过适合分析java源代码的人使用项目IDE: Netbean编译工具mingw+mySYSThread model: win32gcc version 4.4.0 (GCC)
java的jdk7/jdk8通用tools.jar,解决maven项目打包或者启动报错时缺少启动jar包的问题。
JDK_API_1.6 源码文档.chm...................................................................................................................
jdk8目录下的源码不包含rt.jar中的源码,本资源只包含rt.jar包的源码,注意:模块的源码不需要下载,你安装好jdk后,会在${JAVA_HOME}的根目录下找到src.zip,这就是src.jar的源码。
自己准备的JAVA8 完整源码(包含Sun包源码),120M大小的,jdk自带src.zip大小为20M,包括sum.misc.*包内的源码。这个用7z打包后13.3M大小。 源码源自:https://github.com/openjdk-mirror/jdk.git的jdk8u/jdk8u/...
Java工程师成长之路,包含JDK源码解析、Java并发编程、JVM实例解析、Spring全家桶、SpringCloud以及各类中间件代码实例与教程
实际上只需要到官网下载https://download.java.net/openjdk/jdk8/,解压出来的\openjdk\jdk\src\share\classes目录就是是rt.jar的源码。也就是我上传的这个压缩包。 在IDEA中,File——Project Structure——SDKs...
bcprov-ext-jdk15on-146.jar
在jdk中的jre\lib\security修改java.security文件, security.provider.6=com.sun.security.sasl.Provider 下面添加 security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider 在\jre\lib\ext中...
JDK——1.8的tools.jar 包,.
java jdk源码jdk1.9_java.base jdk1.9_java.base中的jdk 9标准库源代码
Bouncy Castle用于 Java 平台的开放源码的轻量级密码术包,它支持大量的密码术算法。
java JDK 源码java JDK 源码java JDK 源码java JDK 源码java JDK 源码java JDK 源码java JDK 源码
jdk源码java.util包,所有类解析,包含整体架构及各个类详解
关于调试jdk源码显示源码变量值的rt.jar重编译包
Java中JDKJRE和JVM解析.doc