HashSet集合存储数据的结构(哈希表)-Set集合存储元素不重复的原理
2024-09-08 16:10:38
HashSet集合存储数据的结构(哈希表)
在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超迂阈值(8 )时,将链表转换为红黑树,这样大大减少了查找时间。
简单的来说,哈希表是由数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下图所示。
Set集合存储元素不重复的原理
给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一
创建自定义Student类
package A_Lian_one.demo13; import java.util.HashSet;
/*
set集合不允许存储重复元素的原理
*/
public class Demo02HashSetSaveString {
public static void main(String[] args) {
//创建HashSet集合对象
HashSet<String> set = new HashSet<>();
String s1 = new String("abc");
String s2 = new String("abc");
set.add(s1);
set.add(s2);
set.add("种地");
set.add("同孤傲");
set.add("阿桑的歌");
System.out.println(set);
}
}
最新文章
- 第三方侧滑菜单SlidingMenu在android studio中的使用
- wp8 入门到精通 测量代码执行时间
- SQL Server 几种锁的区别
- block数据类型
- innodb对update的处理
- 关于使用WKWebViewJavascriptBridge报错的问题
- MySQL创建全文索引
- 初学ASP.NET 知识点
- 程序员如何开始做一个自己的 Side Project?
- Jenkins问题记录:android构建时提示Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zip to /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9 Except
- Confluence 6 浏览默认的 Decorators
- Awesome Python,Python的框架集合
- php之memcached存储session配置、存储、获取
- xlwt模块
- delphi Image处理
- Weblogic在Linux下启动特别慢及进入控制台慢的解决方法
- Javascript/jQuery常用方法
- NIO中的Buffer
- open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory 解决方案
- Statement和PreparedStatement都是用来发送和执行SQL语句的