2016-11-15 54 views
1

刪除重複我試圖從的ArrayList與流行的技術去除重複:從ArrayList的問題

yourList = new ArrayList<String>(new LinkedHashSet<String>(yourList)); 

它的工作原理,但由於該ArrayList是在HashMap中我得到了這個問題。

private void removeDuplicate(HashMap<String, ArrayList<LinkedList<String>>> p) 
{ 
    //cycle for each entry of HashMap 
    for(Map.Entry<String, ArrayList<LinkedList<String>>> entry : p.entrySet()) 
    { 
     ArrayList<LinkedList<String>> partitions = entry.getValue(); 
     partitions = new ArrayList<LinkedList<String>>(new LinkedHashSet<LinkedList<String>>(partitions)); 

    } 
} 

問題是在那之後,HashMap和以前一樣! 變量分區不再有重複,但整個HashMap不變。 問題在哪裏?

+0

你如何匹配'分區'與哈希圖? – XtremeBaumer

回答

2

你只修改partitions這僅僅是一個局部變量,你實際上並沒有修改地圖項的值,更新給定地圖項的值使用Map.Entry#setValue(V value)

for(Map.Entry<String, ArrayList<LinkedList<String>>> entry : p.entrySet()) { 
    ArrayList<LinkedList<String>> partitions = entry.getValue(); 
    entry.setValue(new ArrayList<>(new LinkedHashSet<>(partitions))); 
} 

NB:這將刪除LinkedList重複不String重複

3

你永遠不會把新列表寫回地圖。

您只需將原始列表清單分配到partitions,然後爲其分配一個新值,然後不要以任何方式使用該新值。

partitions = entry.getValue()是一個參考分配 - 它將參考原始列表複製到partitions變量中。 partitions中的新作業將覆蓋參考文獻,而不會覆蓋參考文獻