前言
在Java的集合框架中,Map接口用于存储键值对,提供了一种基于键进行查找和操作的数据结构。Map接口的实现类提供了丰富的方法来操作键值对,例如添加、删除、更新和查找。本文将详细介绍Java中的Map接口及其常见实现类,包括HashMap、TreeMap和LinkedHashMap,并提供一些示例代码。
一、Map 概述
Map接口是一个键值对的集合,它继承自Collection接口中的size()和isEmpty()等方法,同时还提供了根据键查找值的方法,以及添加、删除和更新键值对的方法。在Java中,Map接口有几个常见的实现类,每个实现类都具有不同的性能和用途。
1、HashMap:基于哈希表实现,具有快速的查找和插入操作,适用于需要快速查找键值对的场景。
2、TreeMap:基于红黑树实现,可以对键进行排序,并提供了一系列与排序相关的方法,适用于需要对键进行排序的场景。
3、LinkedHashMap:基于哈希表和链表实现,保持键值对的插入顺序,适用于需要保持插入顺序的场景。
二、Map常见使用方法
HashMap是Map接口的一个常见实现类,它基于哈希表实现,可以提供快速的查找和插入操作。以下是一些常用的HashMap方法:
属性 | 作用 |
---|---|
put(K key, V value) | 将指定的键值对添加到HashMap中 |
remove(Object key) | 从HashMap中移除指定键的键值对 |
get(Object key) | 返回指定键对应的值 |
containsKey(Object key) | 检查HashMap中是否包含指定的键 |
containsValue(Object value) | 检查HashMap中是否包含指定的值 |
size() | 返回HashMap中键值对的数量 |
代码演示:
指定的键值对添加到HashMap中
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("张三", 1);
scores.put("李四", 2);
scores.put("王五", 3);
System.out.println(scores);
}
}
运行结果:
检查HashMap中是否包含指定的键:
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("张三", 1);
scores.put("李四", 2);
scores.put("王五", 3);
System.out.println(scores);
boolean containsKey = scores.containsKey("张三");
System.out.println("Contains Charlie: " + containsKey);
}
}
运行结果:
返回指定键对应的值:
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("张三", 1);
scores.put("李四", 2);
scores.put("王五", 3);
System.out.println(scores);
int aliceScore = scores.get("李四");
System.out.println( aliceScore);
}
}
运行结果:
从HashMap中移除指定键的键值对:
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("张三", 1);
scores.put("李四", 2);
scores.put("王五", 3);
System.out.println(scores);
scores.remove("张三");
System.out.println(scores);
}
}
运行结果:
三、Map循环遍历的五种方法
先使用Map方法定义数据
Map map = new HashMap();
map.put(0,"张三");
map.put(1,"李四");
map.put(2,"王五");
1.通过key的set集合进行遍历,然后通过key来取map的value
Set set = map.keySet();
for (Object o : set) {
System.out.println(o+" "+map.get(o));
}
运行结果:
2.将key的set集合以迭代器的方式遍历出来,然后通过key来取map的value。
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()){
Object next = iterator.next();
System.out.println("key为:"+next+",value为:"+map.get(next));
}
运行结果:
3.将Map的键值对以迭代器的方式遍历出来,然后通过.getKey()与.getValue()方法取k、v的值。
Set<Map.Entry<Object, Object>> entries = map.entrySet();
Iterator<Map.Entry<Object, Object>> iterator1 = entries.iterator();
while (iterator1.hasNext()){
Map.Entry<Object, Object> next = iterator1.next();
System.out.println("key为:"+next.getKey()+",value为:"+next.getValue());
}
运行结果:
4.此方法直接取出map的value并放在collection中,然后将v循环遍历
Collection<Object> values = map.values();
for (Object value : values) {
System.out.println("value为:"+value);
}
运行结果:
5.取得所有键值对来通过foreach循环,遍历出所有k、v,理论上推荐这种方法,尤其是容量较大的时候。
Set<Map.Entry<Object, Object>> entries = map.entrySet();
for (Map.Entry<Object, Object> entry : entries) {
System.out.println("key为:"+entry.getKey()+",value为:"+entry.getValue());
}
运行结果:
四、总结
1、Map接口定义了一些常用的方法,比如put(key, value)用于插入键值对、get(key)用于获取键对应的值、containsKey(key)用于判断是否包含指定的键等等。
2、Map中的键是唯一的,但值可以重复。如果插入一个已经存在的键,新的值将会覆盖旧的值。
3、Map还提供了一些其他的方法,比如keySet()用于获取所有的键的集合、values()用于获取所有的值的集合、entrySet()用于获取所有的键值对的集合等等。
4、Map是一个泛型接口,可以指定键和值的类型。
总之,Java中的Map提供了一种方便的方式来存储和获取键值对数据,它有多种实现方式,可以根据不同的需求选择适合的实现类。