java Map及Map.Entry详解介绍

Java中的Map是一种键值对映射集合,它提供了一种快速的查找机制。在Map中,每个键对应一个值,如果要查找某个值,只需提供其对应的键即可。在Java中提供了多种实现Map接口的类,如HashMap、LinkedHashMap、TreeMap等。本文将对Java中的Map和Map.Entry接口进行详细介绍。

## Map接口

Map是Java中一种键值对的映射接口,它有以下几个常用方法:

### 添加元素

```java

V put(K key, V value) //添加键值对,如果键已经存在,则覆盖原来的值

void putAll(Map m) //将另一个Map中的键值对添加到该Map中

```

### 删除元素

```java

V remove(Object key) //根据键删除对应的值

void clear() //清空Map中的内容

```

### 查询元素

```java

V get(Object key) //根据键返回对应的值,如果键不存在则返回null

boolean containsKey(Object key) //判断Map中是否包含指定的键

boolean containsValue(Object value) //判断Map中是否包含指定的值

```

### 遍历元素

```java

Set keySet() //返回Map中所有键的集合,排序与Map实例的迭代器保持一致

Collection values() //返回Map中所有值的集合,排序与Map实例的迭代器保持一致

Set> entrySet() //返回包含Map中所有键值对的集合

```

Map.Entry接口

Map.Entry是一个嵌套接口,它表示Map中的一个键值对。Map.Entry接口有两个常用方法:

```java

K getKey() //返回该键值对的键

V getValue() //返回该键值对的值

```

Map.Entry接口通常用于遍历Map中的键值对,其常见应用场景包括:

### 遍历Map

```java

//使用迭代器遍历Map

Map map = new HashMap<>();

Iterator> it = map.entrySet().iterator();

while(it.hasNext()) {

Map.Entry entry = it.next();

String key = entry.getKey();

Integer value = entry.getValue();

//do something

}

//使用for循环遍历Map

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

String key = entry.getKey();

Integer value = entry.getValue();

//do something

}

```

### 删除Map中的元素

```java

map.entrySet().removeIf(entry -> entry.getKey().equals("key")); //删除Map中键为key的元素

```

### 修改Map中的元素

```java

map.entrySet().stream().filter(entry -> entry.getKey().equals("key")).forEach(entry -> entry.setValue(10)); //修改Map中键为key的元素值为10

```

### 示例

下面是一个使用Map和Map.Entry的示例,该示例演示了如何计算一段文本中每个单词出现的次数:

```java

public static Map wordCount(String text) {

String[] words = text.trim().split("\\s+"); //将文本按空格切分成单词

Map countMap = new HashMap<>();

for(String word : words) {

countMap.put(word, countMap.getOrDefault(word, 0) + 1); //更新单词出现次数

}

return countMap;

}

```

该方法接收一个字符串text作为参数,返回一个Map,其中存储了text中每个单词出现的次数。在该方法中,首先将文本按空格切分成单词,接着遍历单词数组,计算每个单词出现的次数并更新到Map中。对于已存在于Map中的单词,使用Map的getOrDefault方法获取对应的出现次数并+1,对于尚未存在在Map中的单词,出现次数默认为0,使用getOrDefault方法获取0后再+1即可。

在此基础上,我们可以进一步优化该方法的实现,使用Java 8的lambda表达式和新API:

```java

public static Map wordCount(String text) {

String[] words = text.trim().split("\\s+");

return Arrays.stream(words)

.collect(Collectors.toMap(w -> w, w -> 1, Integer::sum));

}

```

在这个版本中,我们使用Arrays.stream方法将单词数组转换成一个Stream,接着调用collect(位于Stream API中)方法将Stream转换为Map。其中,toMap方法接收三个参数,第一个参数w -> w表示使用单词本身作为键,第二个参数w -> 1表示将出现次数初始化为1,第三个参数Integer::sum表示对于已存在于Map中的单词,将之前的值和当前值相加求和。这种写法不仅更为简洁,而且性能也更为优秀。

综上所述,Map和Map.Entry是Java中非常常用的数据结构,通过它们可以非常方便地实现键值对的映射、查找和遍历。同时,在Java 8中,使用lambda表达式和新API可以更加方便地操作Map,使得代码更加简洁易懂。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(32) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部