Java Map集合用法详解
作者:做哈白日梦 发布时间:2023-08-01 14:47:01
Map集合的概述
概述:interface Map<K,V> 其中K是键的类型,键是唯一的,不重复。V是值的类型,是可以重复。且每个键可以映射最多一个值。注意的是如果存在两个相同的键时,则会将现在的值替换之前的值。
创建方式:以多态的形式创建对象。
特点:
键值对映射关系
一个键对应一个值
键不能重复,值可以重复
元素存取无序
常用方法:
(put(K,V) 将指定的值与该映射中的指定j健相关联,用于添加,返回类型V);
其中获取功能:
其中:KeySet()返回为Set类型,所以键是唯一的,不重复。
遍历方式:
第一种:
通过获取键的集合,再用get方法获取到对应的值。
第二种:
Map的实现类:
HashMap
存储方式:
采用了 Key-value键值对映射的方式进行存储。
底层结构:采用哈希表的存储结构所以里面的数据是无序但是唯一的。(实现唯一的方式就是重写 Hashcode和equals方法)
TreeMap
底层结构:采用的是二叉树的存储方式里面的数据是唯一而且有序的而且一般是按升序的方式排列 (要实现comparable接口并且重写compareTo的方法用来实现它的排序)。
集合嵌套(补充知识):
类似这种形式为:
ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>();
为集合嵌套,主要注意的就是:在集合中嵌套集合的类型和方法使用。
高频面试题
1、Map
HashMap: JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。
LinkedHashMap: LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。详细可以查看:《LinkedHashMap 源码详细分析(JDK1.8)》。
HashTable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。
TreeMap: 红黑树(自平衡的排序二叉树)。
2、HashMap的底层实现
JDK1.8 之前 HashMap 由 数组+链表 组成的(“链表散列” 即数组和链表的结合体)。
JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间,所以有数组+链表+红黑树组成。
来源:https://blog.csdn.net/weixin_46870007/article/details/120874450
猜你喜欢
- 一、Java IO流1、概念在Java中,把不同的输入源 / 输出源(如:键盘、文件、网络链接等)抽象的表述为“流”(stream)通过 ”
- timer和timertask是jdk自带的定时任务实现,无需导入第三方jar包来完成1、指定多久之后执行此任务,注意:只会执行一次publ
- 本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及final关键字对初始化的影响。另外,还讨论了由于继承原因,
- 简单介绍synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1. 修饰一个代码块,被修饰的代码块称为同步语句
- 前言Apache POI [1] 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Mi
- 开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教。1.Student
- 本文实例为大家分享了JDBC实现学生管理系统的具体代码,供大家参考,具体内容如下1、学生类package manage;import jav
- java操作json对象出现StackOverflow错误今天在做项目的时候,遇到一个非常怪异的问题。一个java实体类中存在多个属性,每一
- 前言以前我们还需要手写数据库设计文档、现在可以通过引入screw核心包来实现Java 数据库文档一键生成。话不多说、直接上代码演示。支持的数
- 一、项目概述之前有不少粉丝私信我说,能不能用Android原生的语言开发一款在手机上运行的游戏呢?说实话,使用java语言直接开发游戏这个需
- 1. mybatis-plus开启二级缓存spring: datasource: type: com.alibaba.druid
- 模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用。下面着重详解回调机制。1. 概述Java 中的回调机制
- Mybatis Plus select 查询部分字段Mybatis Plus select语句默认查询所有字段,如需要指定字段查询,则需使用
- 编写RedisConfig首先我们要明白RedisConfig中需要包含什么,首先看看我们直接使用RedisTemplate的问题,我们就知
- 类必须先定义才能使用。类是创建对象的模板,创建对象也叫类的实例化。下面通过一个简单的例子来理解Java中类的定义:public class
- 1.线程池Executors的简单使用1)创建一个线程的线程池。 Executors.newSingleThreadExecutor();
- 前言本文的记录如何用CustomPaint、GestureDetector实现一个进度条控件。首先需要说明的是 flutter Materi
- 本文实例为大家分享了Java使用开源Rxtx实现串口通讯的具体代码,供大家参考,具体内容如下使用方法:windows平台:1、把rxtxPa
- 前言这几天学习谷粒商城又再次的回顾了一次SpringCache,之前在学习谷粒学院的时候其实已经学习了一次了!!!这里就对自己学过来的内容进
- 原理解析:利用RandomAccessFile在本地创建一个随机访问文件,文件大小和服务器要下载的文件大小相同。 根据线程的数量(假设有三个