【发布时间】:2017-09-14 17:34:55
【问题描述】:
我想从 Java LinkedList Collection 框架中删除用户定义的对象。下面的代码不会删除对象。我错过了什么?
import java.util.LinkedList;
import java.util.List;
public class MyObjectKeySearch {
static class CMDTimeSlot{
String comm;
int orig;
int prio;
public CMDTimeSlot(String comm,int orig,int prio){
this.comm = comm;
this.orig = orig;
this.prio = prio;
}
}
public static void main(String a[]){
List<CMDTimeSlot> cmdlist = new LinkedList<>();
CMDTimeSlot one = new CMDTimeSlot("010D",2,2);
CMDTimeSlot two = new CMDTimeSlot("0100",1,1);
CMDTimeSlot three = new CMDTimeSlot("010C",3,3);
cmdlist.add(one);
cmdlist.add(two);
cmdlist.add(three);
for(CMDTimeSlot obj: cmdlist){
System.out.println(obj.comm +" " + obj.orig +" "+obj.prio);
}
cmdlist.remove(new CMDTimeSlot("0100",1,1) );
for(CMDTimeSlot obj: cmdlist){
System.out.println(obj.comm +" " + obj.orig +" "+obj.prio);
}
}
}
输出::
010D 2 2 0100 1 1 010C 3 3
010D 2 2
0100 1 1 010C 3 3
【问题讨论】:
-
你没有实现
equals()和hashCode(),所以remove()调用是比较对象身份,而不是对象值。 -
如果我遍历链表并删除匹配的对象然后它的工作::for(CMDTimeSlot cmd: cmdlist){ if(cmd.comm.equalsIgnoreCase("0100")){ cmdlist.remove(命令); } }
-
读取
LinkedList.remove(Object o)的javadoc:删除具有最低索引的元素i使得(o==null ? get(i)==null : o.equals(get(i)))(如果存在这样的元素)。 如您所见,您需要在您的类CMDTimeSlot上实现equals()以便它比较comm值。
标签: java collections