java 中的map
时间: 2024-12-27 22:26:22 浏览: 13
### Java中Map接口的使用方法、特性及示例
#### 一、概述
`Map<K,V>`是一个存储键值对(key-value pair)的对象,在Java集合框架中占据重要地位。它不允许有重复的键,但不同的键可以关联相同的值。
#### 二、主要实现类及其特点
常见的实现类包括但不限于:
- `HashMap`: 基于哈希表实现,提供常数时间复杂度O(1)的存取效率;不保证迭代顺序。
- `LinkedHashMap`: 继承自`HashMap`,按照插入顺序保存元素;
- `TreeMap`: 实现`SortedMap`接口,能够对其内部的数据按键自然排序或定制比较器指定的方式进行排序[^1]。
#### 三、基本操作演示
下面给出一段简单的程序片段展示如何创建并操作一个`HashMap<String,Integer>`对象:
```java
import java.util.*;
public class Main {
public static void main(String[] args){
// 创建 HashMap 对象
Map<String, Integer> scores = new HashMap<>();
// 添加元素 (put 方法)
scores.put("Alice",90);
scores.put("Bob",75);
// 获取单个元素 (get 方法), 如果 key 存在则返回对应的 value , 否则返回 null 或者默认值
int aliceScore = scores.getOrDefault("Alice",-1);
// 判断是否存在某个key (containsKey 方法)
boolean hasCharlie = scores.containsKey("Charlie");
// 遍历所有的entry项(entrySet 方法配合增强for循环遍历)
Set<Map.Entry<String, Integer>> entries = scores.entrySet();
for(Map.Entry<String, Integer> entry : entries){
String name = entry.getKey();
Integer score = entry.getValue();
System.out.printf("%s:%d\n",name,score);
}
// 删除特定条目(remove 方法),当且仅当存在该键时才会执行删除动作
scores.remove("Bob");
}
}
```
这段代码展示了如何向`Map`结构里添加新成员(`put`),查询已有的记录(`get`,`getOrDefault`),判断某键是否已经存在于容器内(`containsKey`)以及移除不需要的信息(`remove`). 此外还介绍了怎样利用`entrySet()`获取所有映射关系,并通过迭代访问它们.
对于更复杂的场景比如基于value来进行排序输出,则可以通过如下方式完成:
```java
// 按照Value降序排列
List<Map.Entry<String, Integer>> list = new ArrayList<>(scores.entrySet());
Collections.sort(list,(o1,o2)-> o2.getValue()-o1.getValue());
list.forEach(System.out::println);
```
上述例子先将整个Entry集合作为列表处理再调用sort函数对其进行排序最后打印出来。
另外值得注意的是,在某些情况下为了简化语法表达式可借助lambda表达式的帮助使得代码更为直观易懂[^4].
例如构建map的时候可以直接采用stream api加上toMap收集器的形式快速组装而成而无需显式声明中间变量:
```java
private static Map<String, Task> taskMap(List<Task> tasks) {
return tasks.stream()
.collect(Collectors.toMap(Task::getTitle, Function.identity()));
}
```
这里运用到了`Function.identity()`这一辅助工具来代替原本可能较为冗长的手动赋值逻辑从而提高了代码的可读性和维护性[^2].
至于像`putIfAbsent`这样的条件更新语句也十分有用处,能够在确保唯一性的前提下安全地往现有字典里面追加新的项目而不必担心覆盖掉原有的数据[^3].
阅读全文