Java Map接口

Map接口是基于键(key)和值(value)对的集合。每个键值对被称为一个条目(entry)。Map中的键是唯一的。

如果需要根据键进行搜索、更新或删Java Map接口除元素,那么Map是很有用的。

Java Map层次结构

在Java中,有两个接口用于实现Map:Map和SortedMap,以及三个类:HashMap、LinkedHashMap和TreeMap。Java Map的层次结构如下所示:

java-map-hierarchy.png

Map不允许重复的键,但可以有重复的值。HashMap和LinkedHashMap允许使用null键和null值,但TreeMap不允许使用null键或null值。

Map不能直接遍历,因此需要使用keySet()entrySet()方法将其转换为Set。

类名描述
HashMapHashMap是Map的实现,但它不维护任何顺序。
LinkedHashMapLinkedHashMap是Map的实现,它继承自HashMap类,并且按照插入顺序维护元素顺序。
TreeMapTreeMap是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

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想