我想在列表中的元素之后添加一个元素,如果列表已经包含该元素,否则我想将这个新元素添加到列表的开头.
不知何故下面的代码不起作用.
有什么建议?
这种方法是否正确地表现出来?
public class HelloWorld
{
public static void main(String[] args) {
LinkedList<Task> l =new LinkedList<Task>();
l.add(new Task("a"));
l.add(new Task("b"));
l.add(new Task("c"));
int index;
if((index = l.lastIndexOf(new Task("a"))) != -1){
l.add(++index, new Task("5"));
}else{
l.addFirst(new Task("6"));
}
System.out.println(l);
}
}
class Task{
String value;
Task(String v){
value = v;
}
public boolean equals(Task t){
return t.value.equals(this.value);
}
public String toString(){
return this.value;
}
}
Run Code Online (Sandbox Code Playgroud)
输出产生: [6,a,b,c]
预期产出: [a,5,b,c]
你不是Object#equals在Task班上压倒一切.
你需要用它进行参数化Object,否则它就是一个过载.
反过来,这不允许你new Task("a")等于new Task("a"),Object.equals而是调用,而引用不匹配.
这反过来会使您的lastIndexOf调用瘫痪,带来意想不到的结果.
例
@Override
public boolean equals(Object obj) {
// TODO your code, i.e. based on the "value" field
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是IDE(我推荐),您将拥有允许根据您所需的属性起草equals(和hashCode)实现的功能.