簡體   English   中英

復制一個 HashMap<K,V> 到另一個 HashMap<V,K> 在 O(1) 復雜度 (JAVA)

[英]Copy one HashMap<K,V> to another HashMap<V,K> in O(1) complexity (JAVA)

假設我有一個HashMap<String,String>有元素{one=1, two=2, three=3, four=4}並且我想創建另一個HashMap<String,String>其元素將是{1=one, 2=two, 3=three, 4=four}

一種方法是

HashMap<String,String> map1 = new HashMap<String,String>();

map1.put("one",1);
map1.put("two",2);
map1.put("three",3);
map1.put("four",4);

HashMap<String,String> map2 = new HashMap<String,String>();

  for(String s : map.keySet())
  {
    map2.put(map.get(s),s);
  }

但它的時間復雜度為O(N)

我想知道有沒有辦法在O(1) 中做到這一點

你似乎在追求雙向地圖。 Java 在其核心庫中沒有這樣的數據結構。

但是谷歌番石榴庫BiMap ,這似乎是你想要的:

BiMap<String, String> biMap = HashBiMap.create();

biMap.put("key1", "value1");
biMap.put("key2", "value2");

BiMap<String, String> inverse = biMap.inverse();

String key1 = inverse.get("value1"); // key1

這里BiMap.inverse()方法返回原始地圖的視圖 這是一個O(1)時間復雜度操作。

完全同意@andreasHashMap不可能。

你可能想使用位圖所建議@fps但如果有HashMap來做到這一點,你真的沒有很多選擇。

以下是如何使用流 API 反轉HashMap

Map<String,String> map = Map.of("one","1","two","2","three","3")

Map<String,String> reversedMap = map.entrySet()
                                .stream()
                                .map(es -> Map.entry(es.getValue(),es.getKey()))
                                .collect(Collectors.toMap(es -> es.getKey(), es->es.getValue()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM