Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:在LinkedList中的元素后添加元素_Java_List - Fatal编程技术网

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

Java:在LinkedList中的元素后添加元素,java,list,Java,List,如果列表中的某个元素已经包含该元素,我想在该元素之后添加该元素,否则我想将该新元素添加到开头 在名单上 不知何故,下面的代码不起作用 有什么建议吗 这种方法在性能方面是否正确 public class HelloWorld { public static void main(String[] args) { LinkedList<Task> l =new LinkedList<Task>();

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

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

有什么建议吗

这种方法在性能方面是否正确

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; 
      }
    }
公共类HelloWorld
{
公共静态void main(字符串[]args){
LinkedList l=新建LinkedList();
l、 添加(新任务(“a”);
l、 添加(新任务(“b”);
l、 添加(新任务(“c”);
整数指数;
如果((索引=l.lastIndexOf(新任务(“a”))!=-1){
l、 添加(++索引,新任务(“5”);
}否则{
l、 addFirst(新任务(“6”);
}        
系统输出打印LN(l);
}
}
课堂任务{
字符串值;
任务(字符串v){
值=v;
}
公共布尔等于(任务t){
返回t.value.equals(此值);
}  
公共字符串toString(){
返回此.value;
}
}
输出产生:[6,a,b,c]


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

您没有在您的
任务
类中重写
对象#equals

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

这反过来又不允许您的
新任务(“a”)
等于
新任务(“a”)
,而是调用了中的
对象

这反过来会破坏
lastIndexOf
调用,并导致意外结果

示例

@Override
public boolean equals(Object obj) {
    // TODO your code, i.e. based on the "value" field
}

如果您使用的是IDE(我建议使用),那么您将拥有允许根据所需属性起草
equals
(和
hashCode
)实现的功能

您没有在
任务
类中重写
对象#equals

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

这反过来又不允许您的
新任务(“a”)
等于
新任务(“a”)
,而是调用了中的
对象

这反过来会破坏
lastIndexOf
调用,并导致意外结果

示例

@Override
public boolean equals(Object obj) {
    // TODO your code, i.e. based on the "value" field
}

如果您使用的是IDE(我建议使用),那么您将拥有允许根据所需属性起草
equals
(和
hashCode
)实现的功能

你的对手应该是这样的

@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;

}

你的同龄人应该是这样的

@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;

}

旁注:您可以通过使用调试器并在相关行设置断点来了解程序的工作方式。旁注:您可以通过使用调试器并在相关行设置断点来了解程序的工作方式。