在现实生活中,每个人都有唯一的身份证号,通过身份证号可以查询到这个人的信息,这两者是一对一的关系。在应用程序中,如果想存储这种具有对应关系的数据,则需要使用JDK中提供的Map接口。Map接口是一种双列集合,它的每个元素都包含一个键对象Key和一个值对象Value,键和值对象之间存在一种对应关系,称为映射。从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。
Java collections框架的Map接口提供了Map数据结构的功能,它实现了Collection接口。
map的工作流程
在Java中,Map元素存储在键/值对中。 键是与各个值相关联的唯一值。
Map集合不能包含重复的键。并且,每个键都与一个值相关联。
我们可以使用与它们关联的键来访问和修改值。
在上图中,我们有值:United States,Brazil,和Spain。我们都有相应的键:us,br和es。
现在,我们可以使用它们的对应键访问这些值。
注意:Map接口维护3个不同的集合:
键集
值集
键/值关联(Map集合)的集合。
因此,我们可以分别访问键,值和关联。
实现Map的类
由于Map是接口,因此无法从中创建对象。
为了使用Map接口的功能,我们可以使用以下类:
HashMap
EnumMap
LinkedHashMap
WeakHashMap
TreeMap
这些类在集合框架中定义并实现Map接口
继承Map的接口
Map接口也由以下这些子接口继承:
SortedMap
NavigableMap
ConcurrentMap
如何使用map?
在Java中,我们必须导入java.util.Map包才能使用Map。导入包后,将按照以下方法创建map。
//使用HashMap类创建Map
Map<Key, Value> numbers = new HashMap<>();
在上面的代码中,我们创建了一个名为numbers的Map。我们已经使用HashMap类来实现Map接口。
这里,
Key - 用于关联map中每个元素(值)的唯一标识符
Value - map中按键关联的元素
map方法
Map接口包括Collection接口的所有方法。这是因为Collection是Map的超级接口。
除了Collection接口中可用的方法之外,Map接口还包括以下方法:
put(K,V) - 将键K和值V的关联插入到map中。如果键已经存在,则新值将替换旧值。
putAll() - 将指定Map集合中的所有条目插入此Map集合中。
putIfAbsent(K,V) - 如果键K尚未与value关联,则插入关联V。
get(K) - 返回与指定键K关联的值。如果找不到该键,则返回null。
getOrDefault(K,defaultValue) - 返回与指定键K关联的值。如果找不到键,则返回defaultValue。
containsKey(K) - 检查指定的键K是否在map中。
containsValue(V) - 检查指定的值V是否存在于map中。
replace(K,V) - 将键K的值替换为新的指定值V。
replace(K,oldValue,newValue) - 仅当键K与值oldValue相关联时,才用新值newValue替换键K的值。
remove(K) - 从键K表示的Map中删除条目。
remove(K,V) - 从Map集合中删除键K与值V相关联的条目。。
keySet() -返回Map集合中存在的所有键的集合。
values() -返回一组包含在Map集合中的所有值。
entrySet() -返回map中存在的所有键/值映射的集合。
map接口的实现
1.实现HashMap类
import java.util.Map;
import java.util.HashMap;
class Main {
public static void main(String[] args) {
//使用HashMap类创建map
Map<String, Integer> numbers = new HashMap<>();
//将元素插入map集合
numbers.put("One", 1);
numbers.put("Two", 2);
System.out.println("Map: " + numbers);
//map的键
System.out.println("Keys: " + numbers.keySet());
//map的值
System.out.println("Values: " + numbers.values());
//map的条目
System.out.println("Entries: " + numbers.entrySet());
//从map集合中删除元素
int value = numbers.remove("Two");
System.out.println("被删除的值是: " + value);
}
}
输出结果
Map: {One=1, Two=2}
Keys: [One, Two]
Values: [1, 2]
Entries: [One=1, Two=2]
被删除的值是: 2
要了解更多信息HashMap,请访问Java HashMap。
2.实现TreeMap类
import java.util.Map;
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
//使用TreeMap创建map
Map<String, Integer> values = new TreeMap<>();
//插入元素到map
values.put("Second", 2);
values.put("First", 1);
System.out.println("使用TreeMap创建map: " + values);
//替换值
values.replace("First", 11);
values.replace("Second", 22);
System.out.println("新的Map: " + values);
//从map集合中删除元素
int removedValue = values.remove("First");
System.out.println("被移除的值: " + removedValue);
}
}
输出结果
使用TreeMap创建map: {First=1, Second=2}
新的Map: {First=11, Second=22}
被移除的值: 11