Java Map接口
映射包含基于键(即键和值对)的值。每个键和值对称为一个条目。映射包含唯一的键。
如果必须基于键搜索,更新或删除元素,则映射很有用。
Java映射层次结构
有两个用于在Java中实现Map的接口: Map和SortedMap,以及三个类: HashMap,LinkedHashMap和TreeMap。 Java Map的层次结构如下:
Map不允许重复的键,但是您可以有重复的值。 HashMap和LinkedHashMap允许使用空键和值,但是TreeMap不允许使用任何空键或值。
无法遍历Map,因此您需要使用 keySet( )或 entrySet()方法。
班 |
说明 |
HashMap |
HashMap是Map的实现,但它不维护任何顺序。 |
LinkedHashMap |
LinkedHashMap是Map的实现。它继承了HashMap类。它保持插入顺序。 |
TreeMap |
TreeMap是Map和SortedMap的实现。它保持升序。 |
Map接口的有用方法
方法 |
说明 |
V put(Object key, Object value) |
它用于在Map中插入一个条目。 |
void putAll(Map map) |
它用于在Map中插入指定的Map。 |
V putIfAbsent(K key, V value) |
仅当尚未将指定值和指定键插入映射时,才将其插入。 |
V remove(Object key) |
它用于删除指定键的条目。 |
boolean remove(Object key, Object value) |
它会从Map中删除具有关联的指定键的指定值。 |
Set keySet() |
它将返回包含所有键的Set视图。 |
Set <Map.Entry <K,V>> entrySet() |
它返回包含所有键和值的Set视图。 |
void clear() |
用于重置Map。 |
V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) |
它用于计算指定键及其当前映射值的映射(如果没有当前映射,则为null)。 |
V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) |
如果指定的键尚未与值关联(或已映射为null),则使用给定的映射函数计算其值,除非为null,否则将其输入到此映射中。 |
V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) |
如果指定键的值存在且不为空,则用于给定键及其当前映射值的情况下计算新映射。 |
boolean containsValue(Object value) |
如果映射中存在等于该值的值,则此方法返回true,否则返回false。 |
boolean containsKey(Object key) |
如果Map中存在等于该键的某个键,则此方法返回true,否则返回false。 |
boolean equals(Object o) |
用于将指定对象与Map进行比较。 |
void forEach(BiConsumer<? super K,? super V> action) |
它将对映射中的每个条目执行给定的操作,直到处理完所有条目或该操作引发异常为止。 |
V get(Object key) |
此方法返回包含与键关联的值的对象。 |
V getOrDefault(Object key, V defaultValue) |
它返回指定键所映射到的值,如果映射不包含该键的映射,则返回defaultValue。 |
int hashCode() |
它返回Map的哈希码值 |
boolean isEmpty() |
如果映射为空,则此方法返回true;否则为false。如果包含至少一个密钥,则返回false。 |
V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) |
如果指定的键尚未与某个值关联或与null关联,请将其与给定的非null值关联。 |
V replace(K key, V value) |
它将指定值替换为指定键。 |
boolean replace(K key, V oldValue, V newValue) |
它将旧值替换为指定键的新值。 |
void replaceAll(BiFunction<? super K,? super V,? extends V> function) |
它将所有条目的值替换为对该条目调用给定函数的结果,直到处理完所有条目或该函数引发异常为止。 |
Collection values()
|
它返回Map中包含的值的集合视图。 |
int size() |
此方法返回Map中的条目数。 |
Map.Entry接口
Entry是Map的子接口。因此,将通过Map.Entry名称对其进行访问。它返回Map的集合视图,其元素属于此类。它提供了获取键和值的方法。
Map.Entry接口的方法
方法 |
说明 |
K getKey() |
它用于获取密钥。 |
V getValue() |
它用来获取价值。 |
int hashCode() |
它用于获取hashCode。 |
V setValue(V值) |
用于将与该条目对应的值替换为指定值。 |
boolean equals(Object o) |
用于将指定的对象与其他现有对象进行比较。 |
static <K extends Comparable<? super K>,V> Comparator<Map.Entry<K,V>> comparingByKey() |
它返回一个比较器,该比较器以键上的自然顺序比较对象。 |
static <K,V> Comparator<Map.Entry<K,V>> comparingByKey(Comparator<? super K> cmp) |
它返回一个比较器,该比较器使用给定的Comparator通过键比较对象。 |
static <K,V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() |
它返回一个比较器,该比较器以值的自然顺序比较对象。 |
static <K,V>比较器<Map.Entry <K,V>> compareByValue(Comparator <?super V> cmp) |
它返回一个比较器,该比较器使用给定的Comparator按值比较对象。 |
JavaMap示例: 非通用(旧样式)
mport java.util.*;
public class MapExample1 {
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"Amit");
map.put(5,"Rahul");
map.put(2,"Jai");
map.put(6,"Amit");
Set set=map.entrySet();
Iterator itr=set.iterator();
while(itr.hasNext()){
Map.Entry entry=(Map.Entry)itr.next();
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
}
输出:
1 Amit
2 Jai
5 Rahul
6 Amit
Java映射示例: 通用(新样式)
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
JavaMap示例: compareByKey()
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.entrySet()
stream()
sorted(Map.Entry.comparingByKey())
forEach(System.out::println);
}
}
输出:
100=Amit
101=Vijay
102=Rahul
JavaMap示例: 降序比较compareByKey()
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.entrySet()
stream()
sorted(Map.Entry.comparingByKey(Comparator.reverseOrder()))
forEach(System.out::println);
}
}
输出:
102=Rahul
101=Vijay
100=Amit
JavaMap示例: compareByValue()
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.entrySet()
stream()
sorted(Map.Entry.comparingByValue())
forEach(System.out::println);
}
}
输出:
100=Amit
102=Rahul
101=Vijay
JavaMap示例: 按降序比较compareByValue()
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.entrySet()
stream()
sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
forEach(System.out::println);
}
}
输出:
101=Vijay
102=Rahul
100=Amit