Java教程-Java Map接口

Java Map接口
Map接口是基于键(key)和值(value)对的集合。每个键值对被称为一个条目(entry)。Map中的键是唯一的。
如果需要根据键进行搜索、更新或删Java Map接口除元素,那么Map是很有用的。
Java Map层次结构
在Java中,有两个接口用于实现Map:Map和SortedMap,以及三个类:HashMap、LinkedHashMap和TreeMap。Java Map的层次结构如下所示:
Map不允许重复的键,但可以有重复的值。HashMap和LinkedHashMap允许使用null键和null值,但TreeMap不允许使用null键或null值。
Map不能直接遍历,因此需要使用keySet()或entrySet()方法将其转换为Set。
类名 | 描述 |
---|---|
HashMap | HashMap是Map的实现,但它不维护任何顺序。 |
LinkedHashMap | LinkedHashMap是Map的实现,它继承自HashMap类,并且按照插入顺序维护元素顺序。 |
TreeMap | TreeMap是Map和SortedMap的实现,它按照升序维护元素顺序。 |
Java Map示例:非泛型(旧风格)
//非泛型
import java.util.*;
public class MapExample1 {
public static void main(String[] args) {
Map map=new HashMap();
//向map中添加元素
map.put(1,"Amit");
map.put(5,"Rahul");
map.put(2,"Jai");
map.put(6,"Amit");
//遍历Map
Set set=map.entrySet();//转换为Set以便遍历
Iterator itr=set.iterator();
while(itr.hasNext()){
//转换为Map.Entry以便分别获取键和值
Map.Entry entry=(Map.Entry)itr.next();
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
}
输出:
1 Amit
2 Jai
5 Rahul
6 Amit
Java Map示例:泛型(新风格)
import java.util.*;
class MapExample2 {
public static void main(String args[]){
Map<Integer,String> map=new HashMap<Integer,String>();
map.put(100,"Amit");
map.put(101,"Vijay");
map.put(102,"Rahul");
//元素可以以任何顺序遍历
for(Map.Entry m:map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
输出:
102 Rahul
100 Amit
101 Vijay
Java Map示例:按键比较(comparingByKey)
import java.util.*;
class MapExample3 {
public static void main(String args[]){
Map<Integer,String> map=new HashMap<Integer,String>();
map.put(100,"Amit");
map.put(101,"Vijay");
map.put(102,"Rahul");
//返回包含此Map中的映射的Set视图
map.entrySet()
//返回以此集合为源的顺序流
.stream()
//根据提供的比较器进行排序
.sorted(Map.Entry.comparingByKey())
//对流中的每个元素执行操作
.forEach(System.out::println);
}
}
输出:
100=Amit
101=Vijay
102=Rahul
Java Map示例:按键比较(降序)
import java.util.*;
class MapExample4 {
public static void main(String args[]){
Map<Integer,String> map=new HashMap<Integer,String>();
map.put(100,"Amit");
map.put(101,"Vijay");
map.put(102,"Rahul");
//返回包含此Map中的映射的Set视图
map.entrySet()
//返回以此集合为源的顺序流
.stream()
//根据提供的比较器进行排序
.sorted(Map.Entry.comparingByKey(Comparator.reverseOrder()))
//对流中的每个元素执行操作
.forEach(System.out::println);
}
}
输出:
102=Rahul
101=Vijay
100=Amit
Java Map示例:按值比较(comparingByValue)
import java.util.*;
class MapExample5 {
public static void main(String args[]){
Map<Integer,String> map=new HashMap<Integer,String>();
map.put(100,"Amit");
map.put(101,"Vijay");
map.put(102,"Rahul");
//返回包含此Map中的映射的Set视图
map.entrySet()
//返回以此集合为源的顺序流
.stream()
//根据提供的比较器进行排序
.sorted(Map.Entry.comparingByValue())
//对流中的每个元素执行操作
.forEach(System.out::println);
}
}
输出:
100=Amit
102=Rahul
101=Vijay
Java Map示例:按值比较(降序)
import java.util.*;
class MapExample6 {
public static void main(String args[]){
Map<Integer,String> map=new HashMap<Integer,String>();
map.put(100,"Amit");
map.put(101,"Vijay");
map.put(102,"Rahul");
//返回包含此Map中的映射的Set视图
map.entrySet()
//返回以此集合为源的顺序流
.stream()
//根据提供的比较器进行排序
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
//对流中的每个元素执行操作
.forEach(System.out::println);
}
}
输出:
101=Vijay
102=Rahul
100=Amit