首页 > 编程语言 >hash表与java集合框架

hash表与java集合框架

时间:2024-02-21 21:35:26浏览次数:35  
标签:存储 hash 对象 表与 java TreeSet 底层

 

 

 

1. 对象被new出来后,会通过哈希函数Hash(key)建立关键字key与存储地址Addr的关系,Addr = Hash(Key),这个Addr又称HashCode。即:每个对象有唯一的HashCode。

  - 另外:底层对对象进行hash时因为hash表长度有限所以存储可能会有冲突,为了解决冲突而在顺序表的某个存储地址上加了一个链表。hashTable存储结构:

2. java中 == 和equals() 的区别就在于此:==比较的是两个对象是否是同一个对象,即:a和b是否是同一个hashcode;而equals()只是比较a和b的值是否相等,并不比较a和b的hashcode是否相等。

  - 另外:java中的set里的对象是不重复的,这个“不重复”也是根据hashcode来判断是否重复。

3. java中的集合框架有collection、map。

  a. collection= list+set = ArrayList + LinkedList + HashSet + LinkedHashSet + TreeSet 。

  b. map = HashMap + LinkedHashMap + TreeMap。

  - 顾名思义:ArrayList底层使用数组实现,因此就有底层顺序表的优点和缺点

         LinkedList、LinkedHashSet、LinkedHashMap底层用双链表实现,因此也是有序的,也有底层双链表的优点和缺点

         HashSet完全使用HashTable实现,LinkedHashSet/LinkedHashMap比前者多了一个双链表用来记录前后结点顺序

         TreeSet、TreeMap底层用红黑树实现,可进行排序(需要对象实现Comparable接口,或者调用TreeSet/TreeMap的有参构造器:public TreeSet(Comparator<? super E> comparator))

          Map和Set的底层实现基本一致,只是Map需要多存储一个value。

  c. Map转Set:Set<Map.Entry<Object,Object>> entries= map.entrySet();

  d. java中HashMap的时间复杂度是O(1),因为HashMap底层是用顺序表(+链表)实现的,有随机读取的特性。

 

标签:存储,hash,对象,表与,java,TreeSet,底层
From: https://www.cnblogs.com/jinziguang/p/18026246

相关文章

  • 深入剖析 Java 类属性与类方法的应用
    Java类属性Java类属性,也称为字段,是类中的变量。它们用于存储与类相关的数据。创建类属性在类定义中声明属性:publicclassMain{intx;//属性Stringname;//属性}访问类属性使用点语法访问对象的属性:MainmyObj=newMain();myObj.x=5;//设置属性值Sy......
  • Java虚拟机小记
    目录运行时数据区域Java堆对象创建对象的内存布局对象的访问定位句柄直接指针GC判断对象是否已死引用计数算法可达性分析算法引用的类别垃圾收集算法分代收集理论标记清除算法标记复制算法标记整理算法实现细节并发的可达性分析垃圾收集器serial收集器ParNew收集器ParallelScaven......
  • idea创建spring项目的时候只有java 21和17
    1.问题我们在用IDEA创建一个spring项目时,发现java版本只能选用java21,java17,导致我们的jdk版本无法选择jdk1.8(我最常用的版本)2.解决参考:idea创建项目的时候只有java21和17原因是spring2在23年11月24日停止维护了,所以通过spring来创建,没有spring2,只有spring3+,最低jdk版本也是1......
  • Java复习
    目录Java面向对象程序设计(madebyzhoujin)第一章Java开发入门Java语言的优点什么是JDK?:SUN公司提供的一套Java开发环境,是整个java的核心,包括Java编译器、Java运行工具、Java文档生成工具、Java打包工具等JDK安装目录介绍用命令窗口开发java程序两个系统环境变量:path和classpath......
  • java运算符(赋值,关系,逻辑,三目,位运算)
    赋值运算符赋值运算符:=+=-=*=/=%=publicclassFuZhiOptDemo{publicstaticvoidmain(Strng[]args){inta1=3;a1+=2;System.out.println("a1:"+a1);a1-=2;System.out.println("a1:"+a1);......
  • 阿里面试:Java开发中,应如何避免OOM
    Java内存管理:避免OOM的10个实用小技巧引言在Java开发中,OutOfMemoryError(OOM)错误一直是令开发者头疼的问题,也是Java面试中出现核心频率很高的问题。那么我们究竟怎么样才能够有效正确的管理内存,日常开发中究竟要注意哪些核心技巧来避免OOM错误。本文将带大家一起学习10个避免OO......
  • 04-JavaScript介绍
      注意:JS是脚本语言,不需要经过编译,直接经过浏览器的解释就可以运行了。而Java语言需要先编译成class文件,再通过虚拟机进行运行。  <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS-引入方式</title></head><body>......
  • Java人力资源管理系统源码(含数据库)-springboot+vue+mysql
    EHR人力资源管理系统是一种利用现代技术,如云计算、大数据等,来实现企业人力资源信息电子化、流程自动化的系统。它覆盖了人力资源管理的各个方面,从招聘、考勤、绩效到薪酬、社保公积金等,为企业提供一站式的解决方案。​1.招聘管理:-职位发布:系统支持在线发布职位信息,吸引候选人......
  • java常量变量
    标识符标识符:给类,接口,方法,变量等起名时使用的字符序列规则:1.英文大小写构成可以有数字,下划线_和$存在规范1.不能以数字开头2.不能是Java中的关键字3.区分大小写4.要见名知意5.不要出现除了下划线_和$以外的特殊字符包(其实就是文件夹,用于解决相同类名问题)由英文小写......
  • Java导入功能实现
    今天记录一下Java实现导入数据到数据,导入失败显示如下,会告诉你哪里出错了。controller代码实现@Operation(summary="导入工单")@PostMapping("/importOrderData")publicBaseResponse<String>importOrderData(@RequestParam@Parameter(name="excelFile",......