写点什么

Java 重点 | Map 集合

作者:几分醉意.
  • 2022-10-30
    安徽
  • 本文字数:2341 字

    阅读完需:约 8 分钟

Java重点 | Map集合

Map 集合

概述

java.util.Map<k,v>集合 Map 集合的特点:1.Map 集合是一个双列集合,一个元素包含两个值(一个 key,一个 value)。2.Map 集合中的元素,key 和 value 的数据类型可以相同,也可以不同。3.Map 集合中的元素,key 是不允许重复的,value 是可以重复的。4.Map 集合中的元素,key 和 value 是一一对应。

结构继承图

继承图详细介绍

Map 集合介绍:1、Map 集合和 Collection 集合没有关系。2、Map 集合以 key 和 value 的这种键值对的方式存储元素。3、key 和 value 都是存储 java 对象的内存地址。4、所有 Map 集合的 kev 特点:无序不可重复的。Map 集合的 key 和 Set 集合存储元素特点相同。


HashMap 集合介绍:HashMap 集合底层是哈希表数据结构,查询速度快,是非线程安全的。在 JDK8 之后,如果哈希表单向链表中元素超过 8 个,单向链表这种数据结构会变成红黑树数据结构。当红黑树上的节点数量小于 6 时,会重新把红黑树变成单向链表数据结构。这种方式也是为了提高检索效率,二叉树的检索会再次缩小扫描范围。提高效率。初始化容量 16 默认加载因子.75JDK1.8 之前:数组+单向链表 JDK1.8 之后:数组+单向链表/红黑树(链表的长度超过 8):提高查询的速度 HashMap 集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致扩容是:扩容之后的容量是原容量的 2 倍。


LinkedHashMap 集合介绍:1.底层是哈希表+链表(保证迭代的顺序)2.是一个有序的集合,存储元素和取出元素的顺序是一致的


Hashtable 集合介绍:Hashtable 集合底层也是哈希表数据结构,是线程安全的,其中所有的方法都带有 synchronized 关键字,效率较低,现在使用较少了,因为控制线程安全有其它更好的方案.


Properties 属性类介绍:Properties 是线程安全的,因为继承 Hashtable,另外 Properties 存储元素的时候也是采用 key 和 value 的形式存储,并且 key 和 value 只支持 String 类型不支持其它类型。Properties 被称为属性类。


SortedMap 集合介绍:SortedMap 集合的 key 存储元素的特点:首先是无序不可重复的,另外放在 SortedMap 集合 key 部分的元素会自动按照大小顺序排序称为可排序称为可排序的集合。


TreeMap 集合底层的数据结构是一个二叉树。

Map 接口中常用方法

public V put(K key,V value):把指定的键与指定的值添加到 Map 集合中。public V remove(Object key):把指定的键所对应的键值对元素在 Map 集合中删除,返回被删除元素的值public V get(Object key):根据指定的键,在 Map 集合中获取对应的值。boolean containsKey(Object key):判断集合中是否包含指定的键

put 方法

public V put(K key,V value):把指定的键与指定的值添加到 Map 集合中。返回值:v 存储键值对的时候,key 不重复,返回值 v 是 null。存储键值对的时候,kev 重复,会使用新的 value 替换 map 中重复的 value,返回被替换的 value 值。


举例


private static void show01() {        //创建Map集合对象 多态        Map<String,String> map = new HashMap<>() ;
String v1 = map.put("小飞","冰冰1") ; System.out.println("v1:"+v1); //key不重复,返回值是null。输出:v1:null
String v2 = map.put("小飞","冰冰2") ; System.out.println("v2:"+v2); //键重复 返回被替换的值。输出:v2:冰冰1
System.out.println(map); // 输出:{小飞=冰冰2}
map.put("冷风","孔晓云"); map.put("杨过","小龙女"); System.out.println(map);//输出:{杨过=小龙女, 小飞=冰冰2, 冷风=孔晓云}
}
复制代码

remove 方法

public V remove(Object key):把指定的键 所对应的键值对元素 在 Map 集合中删除,返回被删除元素的值。返回值:Vkey 存在,v 返回被删除的值。key 不存在,v 返回 null。


举例


private static void show02() {        //创建Map集合对象        Map<String,Integer> map = new HashMap<>();        map.put("丽颖",168);        map.put("音",165);        map.put("玲",178);        System.out.println(map); //{玲=178, 丽颖=168, 音=165}
Integer v1 = map.remove("玲"); System.out.println("v1:"+v1); //v1:178 key存在,返回被删除的值 System.out.println(map); //{丽颖=168, 音=165}
Integer v2 = map.remove("林志"); System.out.println("v2:"+v2);//v2:null key不存在 返回null System.out.println(map); //{丽颖=168, 音=165}// 注意问题 :多使用包装类接收,少使用基本数据类型
}
复制代码

get 方法

public V get(Object key):根据指定的键,在 Map 集合中获取对应的值。返回值:key 存在,返回对应的 value 值。key 不存在,返回 null。


举例


private static void show03() {        //创建Map集合对象        Map<String,Integer> map = new HashMap<>();        map.put("丽颖",168);        map.put("音",165);        map.put("玲",178);
Integer v1 = map.get("丽颖"); System.out.println("v1:"+v1);// v1:168 有对应的key返回对应的值
Integer v2 = map.get("热巴"); System.out.println("v2:"+v2); //v2:null 没有对应的key返回null }
复制代码

containsKey 方法

boolean containsKey(Object key):判断集合中是否包含指定的键,包含返回 true,不包含返回 false


举例


private static void show04() {        //创建Map集合对象        Map<String,Integer> map = new HashMap<>();        map.put("丽颖",168);        map.put("音",165);        map.put("玲",178);
boolean v1 = map.containsKey("丽颖"); System.out.println("v1:"+v1); //v1:true 有这个key 返回ture
boolean v2 = map.containsKey("颖"); System.out.println("v2:"+v2); //v2:false 没有这个key 返回false }
复制代码


发布于: 刚刚阅读数: 3
用户头像

几分醉意.

关注

还未添加个人签名 2022-10-22 加入

还未添加个人简介

评论

发布
暂无评论
Java重点 | Map集合_Java_几分醉意._InfoQ写作社区