簡體   English   中英

從ArrayList問題中刪除重復項

[英]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.

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