![](/img/trans.png)
[英]How to remove the dulpicates from ArrayList<HashMap<String,Object>> in java?
[英]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);
}
}
这是不允许的。
有关更多信息,请参阅此问答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.