Java教程

Java Map接口

映射包含基于键(即键和值对)的值。每个键和值对称为一个条目。映射包含唯一的键。
如果必须基于键搜索,更新或删除元素,则映射很有用。

Java映射层次结构

有两个用于在Java中实现Map的接口: Map和SortedMap,以及三个类: HashMap,LinkedHashMap和TreeMap。 Java Map的层次结构如下:
Java Map Hierarchy
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
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4