[Java] Map 是什么 (详解)

阅读时间: 5分钟

见到坊间有很多中文教学都对Map的解释不清楚及出现误解,
所以想花些时间给大家清楚简单地说明。
Map是Java的collections framework中的其中一类interface(介面),100%不是collection(集合),也不会inherit(继承) Collection interface。所以不会extend Collection interface。

Map特点:

可以储存key/value值,每一个key都有相对应的value值。不可以出现相同key值。有3个collection views(即是3个Methods),分别是:set of keys (对应的方法是keySet() method),a collection of values (对应的方法是values() method),set of key-value mappings (对应的方法是entrySet() method)。

Implementation(实作)
有5个常用implementation(实作)的方式,分别是HashMap, TreeMap, WeakHashMap, EnumMap和 LinkedHashMap。

Subinterface(子介面)
有3个常用的subinterface(子介面),分别是SortedMap, NavigableMap, 和ConcurrentMap。

怎么使用Map?
首先要import java.util.Map package,之后必须选择一个合适的class来implement(实作) Map interface。

// 现在就随意选一个,选HashMap classMap<Key, Value> testingMap= new HashMap<>();

上面的一句就是创建一个新的Object(物件),名字叫testingMap,类别为Map。
另外,由于选择HashMap class,可以自由使用HashMap的Method。
其实每个可以implement Map interface的class都有不同的功能,可以因应自己的需求去决定使用什么class。

Map的Method(方法)
可以到官网查阅详细及最新的资料 - Interface Map<K,V>
以下是部分Method:put(K, V) –
新增key及value的值,如果已经存在,就会直接取代旧值。putAll() –
把另一个指定的map内的所有key及value的值加入现在的map。putIfAbsent(K, V) -
新增key及value的值,如果已经存在,就没有改动。get(K) –
返回key的value值,如果key不存在,就会直接返回null值。getOrDefault(K, defaultValue) -
返回key的value值,如果key不存在,就会直接返回defaultValue的值。containsKey(K) –
检查key是否存在于map内。.containsValue(V) -
检查value是否存在于map内。replace(K, V) –
取代value的值。replace(K, oldValue, newValue) -
取代value的旧值。remove(K) –
删除key及对应的value.remove(K, V) -
删除key及对应的value.keySet() -
返回map内的所有key值。values() -
返回map内的所有value值。entrySet() -
返回map内的所有key和value值。使用HashMap来implement Map (例子)
import java.util.Map;import java.util.HashMap;public class TestingMap {    public static void main(String[] args) {        // 选择HashMap来创建新的Map物件        Map<String, Integer> testingMapObject = new HashMap<>();        // 新增元素(element)到Map物件 - testingMapObject        testingMapObject.put("One", 1);        testingMapObject.put("Two", 2);                // 列出testingMapObject内的所有key及对应的value        System.out.println("Map: " + testingMapObject);        // 列出testingMapObject内的所有key        System.out.println("Keys: " + testingMapObject.keySet());        // 列出testingMapObject内的所有value        System.out.println("Values: " + testingMapObject.values());        // 列出testingMapObject内的所有key及对应的value        System.out.println("Entries: " + testingMapObject.entrySet());                // 检查testingMapObject内有没有特定元素的key        System.out.println("Contain 2?: " + testingMapObject.containsKey("Two"));                // 删除testingMapObject内的一个元素,然后把相对应的值列印出来        int value = testingMapObject.remove("Two");        System.out.println("Removed Value: " + value);                // 检查testingMapObject内有没有特定元素的key        System.out.println("Contain 2?: " + testingMapObject.containsKey("Two"));                // 检查testingMapObject内有没有特定元素的key        testingMapObject.putIfAbsent("One",2);            }}

参考文章/网站/书本:
(注意,我所参考的文章有不同错误的地方,我只参考当中正确的部分)

Collections Framework - The Map Interface

Java Map Interface
文章内提到Map interface可以implement Collection interface是错误的

Why Map does not extend the Collection interface in Java Collections Framework?

The Map Interface


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章