您好,登錄后才能下訂單哦!
本篇內容主要講解“Map的介紹的使用方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Map的介紹的使用方法”吧!
Map是一個映射接口,不同于List和Set的是他不繼承于Collection接口,Map中存儲的內容是鍵值對(key-value)。
AbstractMap 是繼承于Map的抽象類,它實現了Map中的大部分API。其它Map的實現類可以通過繼承AbstractMap來減少重復編碼。
SortedMap 是繼承于Map的接口。SortedMap中的內容是排序的鍵值對,排序的方法是通過比較器(Comparator)。
NavigableMap 是繼承于SortedMap的接口。相比于SortedMap,NavigableMap有一系列的導航方法;如"獲取大于/等于某對象的鍵值對"、“獲取小于/等于某對象的鍵值對”等等。
Map的主要實現類是HashMap、LinkedHashMap、TreeMap、HashTable等。
繼承于AbstractMap
保存無序的鍵值對
非線程安全,元素可為null
繼承于HashMap
保存有序的鍵值對,默認提供插入時的順序,也可構造成訪問順序。
非線程安全,元素不可為null
繼承于AbstractMap,且實現了NavigableMap接口
保存有序的鍵值對,默認對key排序,也可構造自定義的排序。
非線程安全,元素不可為null
但它繼承于Dictionary,而且也實現Map接口
保存無序的鍵值對
線程安全,元素可為null
interface Entry<K,V> { K getKey(); V getValue(); V setValue(V value); boolean equals(Object o); int hashCode(); public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() { return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getKey().compareTo(c2.getKey()); } public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() { return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getValue().compareTo(c2.getValue()); } public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp) { Objects.requireNonNull(cmp); return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> cmp.compare(c1.getKey(), c2.getKey()); } public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp) { Objects.requireNonNull(cmp); return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> cmp.compare(c1.getValue(), c2.getValue()); } }
/** 返回當前Map中鍵值對的數量 **/ int size(); /** 返回當前Map是否為空 **/ boolean isEmpty(); /** 返回當前Map是否包含鍵key **/ boolean containsKey(Object key); /** 返回當前Map是否包含值value **/ boolean containsValue(Object value); /** 返回當前Map中鍵key對應的值value **/ V get(Object key); /** 將當前Map中鍵key對應的值設置為value **/ V put(K key, V value); /** 移除當前Map中鍵key對應的值 **/ V remove(Object key); /** 將m中所有鍵值對放到當前Map中 **/ void putAll(Map<? extends K, ? extends V> m); /** 移除Map中所有鍵值對 **/ void clear(); /** 返回Map中key的集合 **/ Set<K> keySet(); /** 返回Map中value的集合 **/ Collection<V> values(); /** 返回Map中key-value的集合 **/ Set<Map.Entry<K, V>> entrySet();
/** 根據key獲取value 如果value為空返回默認值defaultValue **/ default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue; } /** 函數式編程 遍歷map中鍵值對 **/ default void forEach(BiConsumer<? super K, ? super V> action) { Objects.requireNonNull(action); for (Map.Entry<K, V> entry : entrySet()) { K k; V v; try { k = entry.getKey(); v = entry.getValue(); } catch(IllegalStateException ise) { // this usually means the entry is no longer in the map. throw new ConcurrentModificationException(ise); } action.accept(k, v); } } /** 函數式編程 提供一個方法 替換所有的value **/ default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) { Objects.requireNonNull(function); for (Map.Entry<K, V> entry : entrySet()) { K k; V v; try { k = entry.getKey(); v = entry.getValue(); } catch(IllegalStateException ise) { // this usually means the entry is no longer in the map. throw new ConcurrentModificationException(ise); } // ise thrown from function is not a cme. v = function.apply(k, v); try { entry.setValue(v); } catch(IllegalStateException ise) { // this usually means the entry is no longer in the map. throw new ConcurrentModificationException(ise); } } } /** 如果map中key為空 則往map中放入key-value **/ default V putIfAbsent(K key, V value) { V v = get(key); if (v == null) { v = put(key, value); } return v; } /** 如果Map中的key對應的值是value 則移除此鍵值對 否則返回false **/ default boolean remove(Object key, Object value) { Object curValue = get(key); if (!Objects.equals(curValue, value) || (curValue == null && !containsKey(key))) { return false; } remove(key); return true; } /** 如果Map中的key對應的值是oldValue 則用newValue替換oldValue 否則返回false **/ default boolean replace(K key, V oldValue, V newValue) { Object curValue = get(key); if (!Objects.equals(curValue, oldValue) || (curValue == null && !containsKey(key))) { return false; } put(key, newValue); return true; } /** 如果Map中存在key鍵 則替換為value 否則返回false **/ default V replace(K key, V value) { V curValue; if (((curValue = get(key)) != null) || containsKey(key)) { curValue = put(key, value); } return curValue; } /** 如果Map中key對應的value為空 則將key計算后設置為key對應的value **/ default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) { Objects.requireNonNull(mappingFunction); V v; if ((v = get(key)) == null) { V newValue; if ((newValue = mappingFunction.apply(key)) != null) { put(key, newValue); return newValue; } } return v; } /** 如果Map中 key對應的oldValue為空 則返回null * 否則根據key和oldValue計算出新的newValue 如果newValue不為空則put到Map中 如果為空 則移除此鍵值對 **/ default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) { Objects.requireNonNull(remappingFunction); V oldValue; if ((oldValue = get(key)) != null) { V newValue = remappingFunction.apply(key, oldValue); if (newValue != null) { put(key, newValue); return newValue; } else { remove(key); return null; } } else { return null; } } /** 根據Map中的key和對應的oldValue計算出newValue * 如果newValue為空 且oldValue不為空 則移除此鍵值對 * 如果newValue為空 且oldValue為空且不存在key 返回null * 如果newValue不為空 則put到Map中 **/ default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) { Objects.requireNonNull(remappingFunction); V oldValue = get(key); V newValue = remappingFunction.apply(key, oldValue); if (newValue == null) { // delete mapping if (oldValue != null || containsKey(key)) { // something to remove remove(key); return null; } else { // nothing to do. Leave things as they were. return null; } } else { // add or replace old mapping put(key, newValue); return newValue; } } /** 根據Map中的key查找oldValue 如果oldValue為空 則設置newValue為oldValue 否則根據oldValue和value計算出newValue * 如果newValue為空 則移除此鍵值對 否則設置key的值為newValue **/ default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) { Objects.requireNonNull(remappingFunction); Objects.requireNonNull(value); V oldValue = get(key); V newValue = (oldValue == null) ? value : remappingFunction.apply(oldValue, value); if(newValue == null) { remove(key); } else { put(key, newValue); } return newValue; }
到此,相信大家對“Map的介紹的使用方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。