一、概述
Java中的Map是一種鍵值對存儲結構,它允許使用一個key訪問對應的value。然而,在某些情況下,我們需要存儲相同的key,這時就需要考慮如何處理相同key之間的value。
二、HashMap
Java中的HashMap是一種非同步的、快速的鍵值對集合,它允許存儲其中相同的key。在HashMap中,相同key的value會被覆蓋,即最後一次put進去的value會成為該key對應的值。下面是一個使用HashMap的例子:
Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.put("key1", "value4");
在上述例子中,因為第一次和第四次put的key都是”key1″,所以最終該key對應的值為”value4″。值得注意的是,在HashMap中,如果key為null,則它的value會覆蓋之前存儲的null值。
三、LinkedHashMap
LinkedHashMap是HashMap的一個子類,它保持了插入順序,即當我們遍歷Map時,它會按照插入的順序返回key-value對。該類也允許存儲相同的key。當我們使用LinkedHashMap來存儲相同key的值時,最終該key對應的value會是所有插入的值的列表。下面是一個使用LinkedHashMap的例子:
Map<String, List<String>> map = new LinkedHashMap<>(); map.computeIfAbsent("key1", k -> new ArrayList<>()).add("value1"); map.computeIfAbsent("key2", k -> new ArrayList<>()).add("value2"); map.computeIfAbsent("key3", k -> new ArrayList<>()).add("value3"); map.computeIfAbsent("key1", k -> new ArrayList<>()).add("value4");
在上述例子中,我們使用了computeIfAbsent方法來處理相同的key。當key在Map中不存在時,computeIfAbsent方法使用提供的Function計算value並將其與key關聯。當key已存在時,該方法返回與key關聯的value。因此,在上述例子中,使用computeIfAbsent方法後,”key1″對應的值變成了[“value1”, “value4”]。
四、ConcurrentHashMap
ConcurrentHashMap是一種線程安全的HashMap,它的put方法是線程安全的。當我們在多線程環境下使用HashMap時,會出現數據競爭的問題,導致數據被覆蓋或者遺漏。使用ConcurrentHashMap可以解決這個問題。當多個線程同時向ConcurrentHashMap中put相同的key-value對時,它不僅不會出現數據競爭,而且會保證所有key-value都能被正確地存儲。下面是一個使用ConcurrentHashMap的例子:
ConcurrentMap<String, String> map = new ConcurrentHashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.put("key1", "value4");
在上述例子中,當多個線程同時調用put方法時,ConcurrentHashMap會保證所有key-value都能被正確地存儲。
五、TreeMap
TreeMap是一種基於紅黑樹實現的有序Map,它按照key的自然順序進行排序。當我們需要使用有序的Map時,可以使用TreeMap。在TreeMap中,相同的key會被覆蓋,即最後一次put進去的value會成為該key對應的值。下面是一個使用TreeMap的例子:
Map<String, String> map = new TreeMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.put("key1", "value4");
在上述例子中,因為第一次和第四次put的key都是”key1″,所以最終該key對應的值為”value4″。
原創文章,作者:EBDT,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/139761.html