2016-11-15 55 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中的新作业将覆盖参考文献,而不会覆盖参考文献