Java Map接口

本文概述

  • Java Map层次结构
  • Map.Entry接口
映射包含基于键的值, 即键和值对。每个键和值对称为一个条目。映射包含唯一键。
如果你必须根据关键字搜索, 更新或删除元素, 则“地图”很有用。
Java Map层次结构 有两个用于在Java中实现Map的接口:Map和SortedMap, 以及三个类:HashMap, LinkedHashMap和TreeMap。 Java Map的层次结构如下:
Java Map接口

文章图片
映射不允许重复的键, 但是你可以有重复的值。 HashMap和LinkedHashMap允许空键和值, 但是TreeMap不允许任何空键或值。
不能遍历Map, 因此你需要使用keySet()或entrySet()方法将其转换为Set。
描述
HashMap HashMap是Map的实现, 但不维护任何顺序。
LinkedHashMap LinkedHashMap是Map的实现。它继承了HashMap类。它保持插入顺序。
TreeMap TreeMap是Map和SortedMap的实现。它保持升序。
Map界面的有用方法
方法 描述
V put(Object key, Object value) 它用于在地图中插入一个条目。
void putAll(Map map) 用于在地图中插入指定的地图。
V putIfAbsent(K key, V value) 仅当尚未指定时, 才将指定值和指定键插入映射中。
V remove(Object key) 用于删除指定键的条目。
boolean remove(Object key, Object value) 它从映射中删除具有关联的指定键的指定值。
Set keySet() 它返回包含所有键的Set视图。
Set < Map.Entry < K, V > > entrySet() 它返回包含所有键和值的Set视图。
void clear() 用于重置地图。
V计算(K键, BiFunction < ?超级K , ?超级V , ?扩展V> remappingFunction) 它用于计算指定键及其当前映射值的映射(如果没有当前映射, 则为null)。
VulateIfAbsent(K键, Function < ?超级K , ?扩展V> mappingFunction) 如果指定的键尚未与值关联(或映射为null), 则使用给定的映射函数来计算其值, 除非为null, 否则将其输入此映射。
VcomputeIfPresent(K键, BiFunction < ?super K, ?super V, ?extended V> remappingFunction) 如果指定键的值存在且不为空, 则用于给定键及其当前映射值的情况下计算新映射。
boolean containsValue(Object value) 如果映射中存在等于该值的值, 则此方法返回true, 否则返回false。
boolean containsKey(Object key) 如果映射中存在等于该键的某个键, 则此方法返回true, 否则返回false。
boolean equals(Object o) 用于将指定的Object与Map进行比较。
void forEach(BiConsumer < ?super K, ?super V> 操作) 它对映射中的每个条目执行给定的操作, 直到所有条目都已处理或该操作引发异常为止。
V get(Object key) 此方法返回包含与键关联的值的对象。
V getOrDefault(Object key, V defaultValue) 它返回指定键映射到的值, 如果映射不包含键的映射, 则返回defaultValue。
int hashCode() 它返回Map的哈希码值
boolean isEmpty() 如果映射为空, 则此方法返回true;否则, 返回false。如果包含至少一个密钥, 则返回false。
V merge(K键, V值, BiFunction < ?super V, ?super V, ?extended 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, ?extended V> 函数) 它用在该条目上调用给定函数的结果替换每个条目的值, 直到处理完所有条目或该函数引发异常为止。
Collection values() 它返回映射中包含的值的集合视图。
int size() 此方法返回映射中的条目数。
Map.Entry接口 【Java Map接口】Entry是Map的子接口。因此, 将通过Map.Entry名称对其进行访问。它返回地图的集合视图, 其元素属于此类。它提供了获取关键和价值的方法。
Map.Entry接口的方法
方法 描述
K getKey() 它用于获取密钥。
V getValue() 它用于获取价值。
int hashCode() 它用于获取hashCode。
V setValue(V value) 用于用指定值替换与该条目对应的值。
boolean equals(Object o) 它用于将指定对象与其他现有对象进行比较。
静态< K扩展Comparable < ?超级K> , V> 比较器< Map.Entry < K, V > > compareByKey() 它返回一个比较器, 该比较器以键上的自然顺序比较对象。
静态< K, V> 比较器< Map.Entry < K, V > > compareByKey(Comparator < ?super K> cmp) 它返回一个比较器, 该比较器使用给定的Comparator通过键比较对象。
静态< K, V扩展了Comparable < ?超级V > > 比较器< Map.Entry < K, V > > compareByValue() 它返回一个比较器, 该比较器以自然顺序对值进行比较。
静态< K, V> Comparator < Map.Entry < K, V > > compareByValue(Comparator < ?super V> cmp) 它返回一个比较器, 该比较器使用给定的Comparator通过值比较对象。
Java Map示例:非泛型(旧样式)
//Non-generic import java.util.*; public class MapExample1 { public static void main(String[] args) { Map map=new HashMap(); //Adding elements to map map.put(1, "Amit"); map.put(5, "Rahul"); map.put(2, "Jai"); map.put(6, "Amit"); //Traversing Map Set set=map.entrySet(); //Converting to Set so that we can traverse Iterator itr=set.iterator(); while(itr.hasNext()){ //Converting to Map.Entry so that we can get key and value separately 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"); //Elements can traverse in any order for(Map.Entry m:map.entrySet()){ System.out.println(m.getKey()+" "+m.getValue()); } } }

输出:
102 Rahul 100 Amit 101 Vijay

Java Map示例: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"); //Returns a Set view of the mappings contained in this map map.entrySet() //Returns a sequential Stream with this collection as its source .stream() //Sorted according to the provided Comparator .sorted(Map.Entry.comparingByKey()) //Performs an action for each element of this stream .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"); //Returns a Set view of the mappings contained in this map map.entrySet() //Returns a sequential Stream with this collection as its source .stream() //Sorted according to the provided Comparator .sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())) //Performs an action for each element of this stream .forEach(System.out::println); } }

输出:
102=Rahul 101=Vijay 100=Amit

Java Map示例: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"); //Returns a Set view of the mappings contained in this map map.entrySet() //Returns a sequential Stream with this collection as its source .stream() //Sorted according to the provided Comparator .sorted(Map.Entry.comparingByValue()) //Performs an action for each element of this stream .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"); //Returns a Set view of the mappings contained in this map map.entrySet() //Returns a sequential Stream with this collection as its source .stream() //Sorted according to the provided Comparator .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) //Performs an action for each element of this stream .forEach(System.out::println); } }

输出:
101=Vijay 102=Rahul 100=Amit

    推荐阅读