簡體   English   中英

從 hashmap 中的 arraylist 中刪除 Object

[英]Remove an Object from an arraylist in a hashmap

我需要你的幫助,我創建了這兩個類

public class Arch <N,T>{
    T label;
    N start;
    N end;
...constructor...

public class Graph <N,T>{
    private ArrayList<N> nodes;                                                                                    
    private HashMap<N,ArrayList<T>> arch;  //for each Node I have saved an arrayList of Archs 
                                            //connected to him                                                                        
    private int nNode;                                                                                             
    private int nArch;                                                                                             
    private boolean oriented;
...constructor..

我需要 Graph 中的一種方法來從 hashmap 中的 ArrayList 中刪除 Arch。

我在 class 圖表中這樣嘗試:


public void deleteArch(N start, N end){                           
    ArrayList<Arch<N,T>> archsForNode=(ArrayList<Arch<N,T>>)arch.get(start);
    for(Arch<N,T> a : archsForNode){                                        
        if(a.start==start || a.end == end) {                                
            archsForNode.remove(a);                                         
        }                                                                   
                                                                            
    }                                                                       
} 

但是當我在我的測試主體中對其進行測試時,結果是 hashmap 中的 ArrayList 沒有任何變化。

請有人可以幫助我!

謝謝你們

我 90% 確定您的問題的根本原因是您的類沒有覆蓋Object#equals(Object)Object#hashCode()方法。 In order for a remove() function to work, it needs to compare the object being passed to the function against members of the collection you are iterating over so that the object that's equal to the argument is removed.

我建議您研究覆蓋這些方法以正確實施。 但是,總而言之,您的類必須實現這些方法,並且在復雜類(包含其他 object 引用的類)的情況下,這些類中的每一個都必須覆蓋這些方法。 String這樣的類在這些情況下起作用的原因是String class 覆蓋了這些方法。 對於您的自定義類,您必須這樣做。 從邏輯上思考這個問題。 如果代碼無法確定哪些對象與您要查找的對象相等,那么集合如何神奇地刪除和 object?

我懷疑deleteArch會拋出ConcurrentModificationException ,因為您在迭代它時正在修改archsForNode

   for(Arch<N,T> a : archsForNode){                                        
        if(a.start==start || a.end == end) {                                
            archsForNode.remove(a);                                         
        }                                                                                                                                             
    } 

這是不允許的。
有關更多信息,請參閱問答。

ArrayList 之謎<object>在 HashMap<div id="text_translate"><p> 我只是在運行下面的代碼,我對結果感到驚訝。 有人可以解釋一下這里發生了什么嗎? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在這里做錯了什么,請告訴我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object>

[英]Mystery with ArrayList<Object> in a HashMap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何從ArrayList中刪除dulpicates <HashMap<String,Object> &gt;在Java中? 如何從 ArrayList 中刪除項目<HashMap<String, Object> &gt; 從哈希圖中的數組列表中刪除一個值 從ArrayList中刪除一個對象 從ArrayList中刪除對象 如何將 String 對象保存到 ArrayList 並刪除此 ArrayList 中的 HashMap <HashMap<String, String> &gt;? 從 object ArrayList 中刪除 object 可序列化的對象到Hashmap的Arraylist ArrayList 之謎<object>在 HashMap<div id="text_translate"><p> 我只是在運行下面的代碼,我對結果感到驚訝。 有人可以解釋一下這里發生了什么嗎? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在這里做錯了什么,請告訴我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object> 從ArrayList中刪除重復項 <ArrayList<String> &gt;對象
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM