Java重点 | Map集合

简介: 本文将对Map集合概念以及常用方法进行详细的介绍,通过代码实战,让你深入浅出的理解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默认加载因子.75
JDK1.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集合中删除,返回被删除元素的值。
返回值:V
key存在,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
    }
相关文章
|
7天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
29 3
|
24天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
40 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
46 4
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
37 2
|
2月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
2月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
2月前
|
Java 开发者
|
2月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
37 0
|
2月前
|
Java API Apache
java集合的组内平均值怎么计算
通过本文的介绍,我们了解了在Java中计算集合的组内平均值的几种方法。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。无论是使用传统的循环方法,还是利用Java 8的Stream API,亦或是使用第三方库(如Apache Commons Collections和Guava),都可以有效地计算集合的组内平均值。希望本文对您理解和实现Java中的集合平均值计算有所帮助。
42 0