2016-02-04 39 views
0

鑑於我有一個LinkedHashMap<String,Boolean>和一個ArrayList<String>,我如何根據密鑰更新LinkedHashMap從列表更新映射的有效方法

我能想到的解決方法是:

private void updateFilesPath(LinkedHashMap<String,Boolean) map,ArrayList<String> list) { 
    for (String filePath : list) 
     if (map.get(filePath) == null) 
      map.put(filePath, true); 
} 

但這soloution是O(n^2)(n次迭代和收集與時間複雜度O(n)搜索)
是否有實現這一目標的一個更有效的方法?

+0

不確定你試圖用這個來達到什麼目的。你可以退後一步,解釋一下你的用例嗎? – Marvin

+0

使用linkedhashmap的任何特定原因? –

+0

@Marvin布爾值用於確定檢查清單是否已被檢查。構造函數提供araylist來創建item.so我應該自己更新hashmap來引用已檢查的項目 – Mehrdad

回答

0

如果您使用的是Java 8那麼它應該只是一個使用forEach添加新值的事:

filePath.forEach(key -> map.put(key, true)); 

如果你只是想更新它,如果它不存在,那麼:

filePath.forEach(key -> map.putIfAbsent(key, true)); 
0

HashMap或HashTable或Arrays或TreeMap的搜索複雜度爲O(n)。您可以使用具有O(log(n))複雜度的B樹。