Java--Map集合

Map

映射(map)是存储键和值间关联(即,键值对)的对象。给定一个键,可以找到其值。键和值都是对象。键必须唯一,但是值可以重复。

支持映射的接口

|--------------|-------------------------------------|
| 接 口 | 描 述 |
| Map | 将唯一键映射到值 |
| NavigableMap | 扩展SortedMap接口,以处理基于最接近匹配搜索原则的键/值对检索 |
| SortedMap | 扩展Map接口,从而以升序保存键 |
| Map.Entry | 描述映射中的元素(键/值对) |

interface Map

映射围绕两个基本操作:get()和put()。为了将值放入到映射中,使用put(),指定键和值。为了获取值,调用get(),传递键作为变元,值会被返回。

映射类

常用的映射类:HashMap、LinkedHashMap、TreeMap

HashMap

HashMap实现了Map接口。它使用哈希表存储映射,即使对于比较大的集合,get()和put()的执行时间也保持不变。其声明如下:

class HashMap

HashMap类定义了以下构造方法:

HashMap( )

HashMap(int capacity) //指定容量,默认是16

HashMap(int capacity, float fillRatio) //充填比率,0.0-1.0之间,默认0.75

HashMap(Map m)

LinkedHashMap

LinkedHashMap扩展了Hashmap类,该类在内部使用一个链表维护条目添加到映射中的顺序,从而可以按照插入顺序迭代整个映射。

LinkedHashMap定义了以下构造方法:

LinkedHashMap( )

LinkedHashMap(int capacity)

LinkedHashMap(int capacity, float fillRatio)

LinkedHashMap(Map m)

TreeMap

TreeMap类扩展了AbstractMap类,并实现了NavigableMap接口。该类使用树接口存储条目。TreeMap提供了有序存储键/值对的高效手段,并支持快速检索。应当注意,TreeMap确保其元素以键的升序存储。

TreeMap类定义了以下构造方法:

TreeMap( )

TreeMap(Comparator comp) //比较器对象作为参数

TreeMap(Map m)

TreeMap(SortedMap sm)

Hashtable类

Hashtable类也实现了Map接口,与HashMap类似。

主要区别:

1、Hashtable是同步的、线程安全的,而HashMap不是同步的,没有实现线程安全。

2、HashMap允许将null作为一个条目的key或者value,而Hashtable不允许。当然只能有一个条目的键为null。

3、HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

Map的遍历

映射不是集合,没有实现Collection接口。因此不能直接遍历映射。

Entry接口是在Map接口的内部定义的,是内部接口。

在Map中存储的元素是键-值对,一个键-值对作为一个整体使用Map.Entry接口表示。Map.Entry定义的方法:

|-----------------|---------------|
| K getKey() | 返回该映射条目的键 |
| V getValue() | 返回该映射条目的值 |
| V setValue(V v) | 将这个映射条目的值设置为v |

直接使用增强for循环遍历Map

Map map = new HashMap();

map.put("a", 1);

map.put("b", 2);

map.put("c", 3);

for (Map.Entry entry : map.entrySet()) {

// 获取当前遍历的键

String key = entry.getKey();

// 获取当前遍历的值

Integer value = entry.getValue();

// 打印当前遍历的键值对

System.out.println("key:" + key + ";value:" + value);

// key:a;value:1

// key:b;value:2

// key:c;value:3

}

为了遍历映射需要采用变通的方法:获得映射的集合视图。

使用entrySet()方法,返回包含映射中所有元素(键-值对)的Set对象

使用keySet(),返回包含映射中所有键的Set对象。

使用values(),返回包含映射中所有值的Collection对象

对于这三个集合视图都是基于映射的,修改其中的一个集合会影响其他集合。

相关推荐
用户37215742613520 分钟前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊1 小时前
Java学习第22天 - 云原生与容器化
java
渣哥3 小时前
原来 Java 里线程安全集合有这么多种
java
间彧3 小时前
Spring Boot集成Spring Security完整指南
java
间彧4 小时前
Spring Secutiy基本原理及工作流程
java
Java水解5 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆7 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学7 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole7 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊7 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端