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;
}
旁注:您可以通过使用调试器并在相关行设置断点来了解程序的工作方式。旁注:您可以通过使用调试器并在相关行设置断点来了解程序的工作方式。