[英]Remove duplicates from ArrayList issue
我正在嘗試使用流行的技術從ArrayLists中刪除重復項:
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保持不變。 問題出在哪兒?
您永遠不會將新列表寫回到地圖中。
您只需將列表的原始列表分配給partitions
然后向其中分配一個新值,然后就不以任何方式使用該新值。
partitions = entry.getValue()
是一個引用分配-它將對原始列表的引用復制到partitions
變量中。 對partitions
的新分配會覆蓋引用,而不是引用的對象 。
您只需修改僅是局部變量的partitions
,而實際上並沒有修改映射條目的值,而是使用Map.Entry#setValue(V value)
更新給定映射條目的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)));
}
注意:這將刪除LinkedList
重復項而不是String
重復項
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.