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);
}
}

最新文章

  1. 第三方侧滑菜单SlidingMenu在android studio中的使用
  2. wp8 入门到精通 测量代码执行时间
  3. SQL Server 几种锁的区别
  4. block数据类型
  5. innodb对update的处理
  6. 关于使用WKWebViewJavascriptBridge报错的问题
  7. MySQL创建全文索引
  8. 初学ASP.NET 知识点
  9. 程序员如何开始做一个自己的 Side Project?
  10. 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
  11. Confluence 6 浏览默认的 Decorators
  12. Awesome Python,Python的框架集合
  13. php之memcached存储session配置、存储、获取
  14. xlwt模块
  15. delphi Image处理
  16. Weblogic在Linux下启动特别慢及进入控制台慢的解决方法
  17. Javascript/jQuery常用方法
  18. NIO中的Buffer
  19. open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory 解决方案
  20. Statement和PreparedStatement都是用来发送和执行SQL语句的

热门文章

  1. 蓝桥杯赛前复习C++
  2. web前端学习之旅笔记01--HTML
  3. shardingsphere-jdbc 水平分表学习记录
  4. docker常用配置以及命令
  5. Python学习之实例2
  6. hwlog----types.go
  7. Mybatis——Plus :表与表之间的关系:1对多和多对一
  8. JavaEE Day00 Java Web课程介绍
  9. 【每日一题】【DFS和回溯的区别】【BFS】104. 二叉树的最大深度-211227/220218
  10. include指令和include动作的区别