Java:在LinkedList中的元素之后添加元素

San*_*rma 1 java list

我想在列表中的元素之后添加一个元素,如果列表已经包含该元素,否则我想将这个新元素添加到列表的开头.

不知何故下面的代码不起作用.

有什么建议?

这种方法是否正确地表现出来?

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]

Men*_*ena 5

你不是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)实现的功能.