首页 > 编程语言 >Java Map集合

Java Map集合

时间:2023-03-15 22:14:54浏览次数:34  
标签:Map Java 哈希 对象 链表 Key 集合 HashMap

Map接口

  • 成对的对象(两个对象 ) 才能作为一个 集合元素对象,一对才算一个,Key(主键):Value(值)
  • Map的Key对象是不可重复的
  • key对象(是具有唯一性的 能唯一地代表某个value对象的对象 才能作为主键)例如 单车的id 人的id 学生的id

Map的实现类

HashMap

  • 哈希值 hashCode方法返回对象的哈希值,哈希值能唯一得代表某个对象,就好像对象的身份证号码一样;不同的对象拥有不同的哈希值;哈希算法,通过哈希算法得到的值 称之为哈希值;数据压缩算法,把一个无限范围内的数据压缩到一个有限范围内 ;抽屉原理:10个苹果 9个抽屉 100个苹果尽量分散在9个抽屉中(0-8),如果不同的苹果经过哈希算法得到了同一个值 也就是说要放 同一个抽屉中称这种情况是 哈希冲突;哈希冲突是解决不了的 只能尽量避免;
  • HashMap 源码内部用到了哈希算法 所以名称中也带有hash;
  • HashMap底层是哈希表(别名:字典表,映射表;哈希表由 数组+单向链表 结合而成的一种数据结构 把数组和链表的优点结合到一块 );从JDK8开始哈希表 是由 数组+单向链表+红黑树 组成的;
  • HashMap在JDK引入红黑树的目的是为了提升单向链表的查询性能;

LinkedHashMap

  • LinkedHashMap是HashMap的子类
  • 底层是哈希表(数组+单向链表+红黑树)的基础上 又加了一个双向链表,为了维持元素的添加顺序;

TreeMap

  • TreeMap的底层是红黑树(二叉排序树)要根据Key对象进行排序;
  • TreeMap的Key类型必须是可以比较大小的类型,Key类型要么实现Comparable接口,要么在TreeMap构造器中提供比较器

Hashtable

  • Hashtable 底层也是哈希表(数组+链表)
  • Hashtable是线程安全的Map; HashMap,LinkedHasMap TreeMap线程都不安全
  • Hashtable性能过低的,在多线程高并发项目中已经不适用了,ConcurrentHashMap适用于多线程高并发项目中,性能较高;

Map使用注意

1,Key的选型,Key对象使用的是具有唯一性的对象 能唯一地代表某个value对象;

Key的类型一般使用不可变类型,常使用String Integer ,因为String和Integer都是不可变的类型

标签:Map,Java,哈希,对象,链表,Key,集合,HashMap
From: https://www.cnblogs.com/jh0129/p/17220322.html

相关文章

  • 《Hadoop Operations》读书笔记 - 2 - 第三章 MapReduce
    MapReduce,在这里实际上有两个含义,一个是一种分布式计算模型;另一个是某种特定实现,比如ApacheHadoopMapReduce。其设计目的是为了简化大规模、分布式、高容错性的数据处理应......
  • Java虚拟机详解——JVM常见问题总结
    面试必问关键词:JVM垃圾回收、类加载机制。 先把本文的目录画一个思维导图:一、Java引用的四种状态:强引用:用的最广。我们平时写代码时,new一个Object存放在堆内存......
  • 软光栅从零开始——shadow map
    前言​ 上篇我们谈及phone光照、法线贴图与切线空间,实现了高效的光照效果。本篇我们将基于上篇的效果实现阴影贴图添加硬阴影原理​ 阴影贴图的思想是光源看不到而摄像......
  • Java基本数据类型
    Java基本数据类型Java有数据类型分为两大类:内置数据类型引用数据类型内置数据类型Java一共八种数据类型:六种数字类型(四个整形、两个浮点性)一种字符类型、一种布尔型......
  • java类型转换方式
    java类型转换方式mapstruct并不好用,代码臃肿,性能高一点参考https://blog.csdn.net/WX5991/article/details/121936717......
  • 随笔分类里的JAVA一栏里面是有内容的!!!
    随笔分类里的JAVA一栏里面是有内容的!!!可能是网站有bug,没有显示出来,需要点击进去,然后在左栏就能看到有关JAVA的内容了。博客园在文件分栏应该这里有bug,比如点击最外层文件......
  • 数组模拟环形队列java(数据结构与算法)
    思路:背景队列有两种实现方式:1、数组,2、链表在数组实现队列时,有的教科书中只说了队列满的条件是(rear+1)%manSize=front这个公式真让人摸不着头脑原来:这是数组模拟环......
  • 3分钟了解Java中Stack,Queue,Deque常用方法
    stack常用语法booleanempty()测试堆栈是否为空。Objectpeek()查看堆栈顶部的对象,但不从堆栈中移除它。Objectpop()移除堆栈顶部的对象,并作为此函......
  • Java 关键字 transient
    前言最近在看HashMap源代码的时候,发现链表table数组采用了transient关键字,笔者当时感觉对transient关键字即陌生但又有似曾相识,所以花了一些时间简要的总结了下使......
  • 【学习日志】Java基本数据类型的自动装箱和拆箱
    //测试代码publicstaticvoidmain(String[]args){Integera=1;Integerb=2;Integerc=3;Integerd=3;Integ......