哈希值与HashSet集合存储数据的结构(哈希表)
HashSet集合存储数据的结构(哈希表)
什么是哈希表呢?
在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里
但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,哈
希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。
哈希表
在jdk1.8版本之前,哈希表=数组+链表结构
在jdk1.8版本之后,值得注意的是。哈希表也=数组+链表,但是呢哈希表还=数组+红黑树(提高查询的速度)
所以说哈希表的特点:查询速度快
因为是一个集合,所以我们先画一个容器
package Demo01Set; /* 哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到地址,不是数据实际存储的物理地址在object类有一个方法,可以获取对象的哈希值 在Object类有一个方法,可以获取对象的哈希值 int hashCode()返回该对象的哈希码值 hashcode方法的源码: public native int hashcode( ); native:代表该方法调用的是本地操作系统的方法 */ public class HashCode_Demo02 { public static void main(String[] args) { //Person类继承了object类,所以可以使用object类的hashcode方法 Person person = new Person(); int i = person.hashCode(); System.out.println(i); Person person1 = new Person(); int i1 = person1.hashCode(); System.out.println(i1); /* toString 方法的源码 return getclass( ).getName( ) +“@” + Integer.toHexString( hashcode()); */ System.out.println(person);//Demo01Set.Person@1b6d3586 System.out.println(person1);//Demo01Set.Person@4554617c System.out.println(person==person1); /* String类的哈希值 string类重写obejct类的hashcode方法 */ String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); System.out.println("重地:".hashCode()); System.out.println("通话:".hashCode()); } }
HashSet集合存储数据的结构(哈希表)jdk1.8版本之前:哈希表=数组+链表jdk1.8版本之后:
哈希表=数组+链表;
哈希表=数组+红黑树(提高查询的速度)
哈希表的特点:速度快
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)