Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • Java入门基础

  • Java核心基础

    • 多线程

    • Java常用类

    • 枚举类与注解

    • Java集合

      • Java集合框架概述
      • Collection
      • List
      • ArrayList
      • LinkedList
      • Vector
      • Set
      • HashSet
      • LinkedHashSet
      • TreeSet
      • Map
        • 前言
        • Map接口继承树
        • Map接口概述
        • 结构图示例
        • 常用方法
        • 练习
        • 总结
      • HashMap
      • LinkedHashMap
      • TreeMap
      • Hashtable
      • Properties
      • Collections工具类
    • 数据结构与算法

    • 泛型

    • IO流

    • 网络编程

    • 反射

    • 函数式编程

  • 设计模式

  • Web开发

  • SpringBoot

  • 微服务

  • Elasticsearch

  • 运维

  • 后端
  • Java核心基础
  • Java集合
SaulJWu
2020-12-26

Map

# 前言

Java 集合可分为Collection 和Map 两种体系:

  • Collection接口:单列数据,定义了存取一组对象的方法的集合
    • List:元素有序、可重复的集合
      • ArrayList、LinkedList、Vector
    • Set:元素无序、不可重复的集合
      • HashSet、LinkedHashSet、TreeSet
  • Map接口:双列数据,保存具有映射关系“key-value对”的集合,也称为键值对。
    • HashMap、LinkedHashMap、TreeMap、Hashtable、Properties

前面我们已经学完Collection 体系,接下来学习Map体系。

# Map接口继承树

image-20201226222436325

从图中,得知SortedMap和TreeMap是有序的。

除了SortedMap是接口,其他都是实现类。

# Map接口概述

  • Map与Collection并列存在。用于保存具有映射关系的数据:key-value,所以也叫键值对结构。
  • Map 中的key 和value 都可以是任何引用类型的数据
  • Map 中的key 用Set来存放,不允许重复,即同一个Map 对象所对应的类,须重写hashCode()和equals()方法
  • 常用String类作为Map的“键”
  • key 和value 之间存在单向一对一关系,即通过指定的key 总能找到唯一的、确定的value
  • Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和Properties。其中,HashMap是Map 接口使用频率最高的实现类

# 结构图示例

image-20201226222802026

# 常用方法

添加、删除、修改操作:

  • Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
  • void putAll(Map m): 将m中的所有key-value对存放到当前map中
  • Object remove(Object key):移除指定key的key-value对,并返回value
  • void clear():清空当前map中的所有数据

元素查询的操作:

  • Object get(Object key):获取指定key对应的value
  • boolean containsKey(Object key):是否包含指定的key
  • boolean containsValue(Object value):是否包含指定的value
  • int size():返回map中key-value对的个数
  • boolean isEmpty():判断当前map是否为空
  • boolean equals(Object obj):判断当前map和参数对象obj是否相等

元视图操作的方法:

  • Set keySet():返回所有key构成的Set集合
  • Collection values():返回所有value构成的Collection集合
  • Set entrySet():返回所有key-value对构成的Set集合

# 练习

@Test
public void test1() {
    Map map = new HashMap();
    System.out.println("map中所有的key:");//HashSet
    Set keys = map.keySet();
    for (Object key : keys) {
        System.out.println(key);
    }
    System.out.println("map中所有的value:");
    Collection values = map.values();
    for (Object value : values) {
        System.out.println(value);
    }
    System.out.println("map所有的映射关系:");
    Set mappings = map.entrySet();
    for (Object mapping : mappings) {
        Map.Entry entry = (Map.Entry) mapping;
        System.out.println("key是:" + entry.getKey() + ",value是:" + entry.getValue());
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 总结

Map:双列数据,存储key-value对的数据

  • HashMap:作为Map的主要实现类;线程不全的,效率高;存储null的key和value。JDK7即之前底层是数组+链表,JDK8及以上底层是数组+链表+红黑树。
    • LinkedHashMap:保证在遍历map元素时,添加了一对指针,指向前一个元素和后一个元素。对于频繁的遍历操作,执行效率要高于HashMap。
  • TreeMap:保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序。底层使用红黑树结构。
  • Hashtable:作为古老的实现类;线程安全的,效率低;不能存储null的key和value。
    • Properties:常用来处理配置文件。key和value都是String类型。

面试题或等下我们要学习的内容:

  • 1、HashMap的底层实现原理?
  • 2、HashMap和hashtable的异同?
  • 3、Currenthashmap与Hashtable异同?(暂时不讲)
帮我改善此页面 (opens new window)
#HashMap#LinkedHashMap#TreeMap#Hashtable#Properties
上次更新: 2020/12/27, 05:00:47
TreeSet
HashMap

← TreeSet HashMap→

最近更新
01
zabbix学习笔记二
02-28
02
zabbix学习笔记一
02-10
03
Linux访问不了github
12-08
更多文章>
Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式