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

时间:2016-05-30 15:02:48

标签: 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; 
      }
    }

输出产生: [6,a,b,c]

预期输出: [a,5,b,c]

2 个答案:

答案 0 :(得分:5)

您未在graph explorer课程中覆盖Object#equals

您需要使用Task对其进行参数化,否则会导致过载。

这反过来又不允许Object等于new Task("a"),而是调用new Task("a"),而引用不匹配。

这反过来会削弱你的Object.equals调用,带来意想不到的结果。

示例

lastIndexOf

如果你正在使用IDE(我推荐),你将拥有允许根据你想要的属性起草@Override public boolean equals(Object obj) { // TODO your code, i.e. based on the "value" field } (和equals)实现的功能。

答案 1 :(得分:3)

你的平等应该是这样的。

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    Task task = (Task) o;

    return value != null ? value.equals(task.value) : task.value == null;

}