Java 如何删除、修改和提取列表中的元素?
我是一名Java初学者,目前正在从事一个几乎已经完成的项目 我需要删除、修改和提取列表中的元素。这是一个基本的元素,尽管我知道有ArrayList。这让我发疯,因为我确切地知道我需要做什么,但我没有得到我应该开始编程的东西Java 如何删除、修改和提取列表中的元素?,java,list,Java,List,我是一名Java初学者,目前正在从事一个几乎已经完成的项目 我需要删除、修改和提取列表中的元素。这是一个基本的元素,尽管我知道有ArrayList。这让我发疯,因为我确切地知道我需要做什么,但我没有得到我应该开始编程的东西 package lec05; import java.util.*; /** * * @author ulacit */ public class Lista { Celda head; public Lista() { head = null; }
package lec05;
import java.util.*;
/**
*
* @author ulacit
*/
public class Lista {
Celda head;
public Lista() {
head = null;
}
public void add(Person aPerson) {
if (head == null) { // list = empty
head = new Celda(aPerson);
} else if (aPerson.getId() < head.getInfo().getId()) { // add element - left
Celda aux = new Celda(aPerson);
aux.setNext(head);
head = aux;
} else if (head.getNext() == null) { // add 1 element - right
Celda aux = new Celda(aPerson);
head.setNext(aux);
} else { // more than 1 - add at the end or in the middle
Celda actual = head;
while (actual.getNext() != null
&& actual.getNext().getInfo().getId() < aPerson.getId()) {
actual = actual.getNext();
}
Celda aux = new Celda(aPerson);
aux.setNext(actual.getNext());
actual.setNext(aux);
}
}
public boolean (int id) {
Celda aux = head;
while (aux != null && aux.getInfo().getId() < id) {
aux = aux.getNext();
}
return (aux != null && aux.getInfo().getId() == id);
}
public Person restore(int id) {
Celda aux = head;
while (aux != null && aux.getInfo().getId() < id) {
aux = aux.getNext();
}
if (aux != null && aux.getInfo().getId() == id) {
return aux.getInfo();
} else {
return null;
}
}
public void remove(int id) {
}
public void modify(int id, String name) {
}
public Persona extract(int id) {
}
@Override
public String toString() {
String s = "List{";
Celda aux = head;
while (aux != null) {
s += aux.getInfo() + ", ";
aux = aux.getNext();
}
return s;
}
}
如果要添加和删除,则需要指针。您一直在引用getNext,但没有下一个指针。将指针视为每个元素的连接。如果你有两个元素,你怎么知道哪个是第一个,哪个是第二个。你一定有关系 这里有一个很好的入门教程:提示: 您不应该实现自己的列表数据结构。。。除非你被特别要求这样做。最好改用现有的列表类型;e、 g.ArrayList或LinkedList 您的代码无法编译 逐步开发此功能: 在尝试编写其余方法之前,请完成并测试addPerson、getid和toString方法 一次开发/测试一种剩余方法 实现您自己的单元测试。这不是强制性的,但它将帮助您系统地测试代码。单元测试不需要很漂亮 如果你被卡住了,有很多关于数据结构和算法的好教材可以解释链表是如何工作的 你拥有的是一个单一的链表;i、 e.列表中的节点具有指向下一个节点的链接。。。但不是上一个节点。在单个链表上执行操作的诀窍是,当您迭代链表时,您通常需要跟踪保存指向您正在查看的链表的链接的节点。例如,要从列表中删除节点,您需要能够在当前节点之前修改该节点
这一点也不难,你可以 你有你的列表的头,你有的是一个单链表 下面是一个单链表的示例。 例如,当您调用removeint x时,假设x是Celda的id
Some pseudocode
aux=Head
1. Check if you have aux (aux !=null)
2. Check if the aux has that id
2.1. if not move to the next Celda and start the same question (aux = aux.getNext())
2.2 if it has, you know what to delete, so you have to have a reference to the previous Celda of aux if it exist in this method, so know the previous.getNext() = aux.getNext()
如果您可以用图像进行可视化,那么编写代码就容易多了 您是如何尝试解决这个问题的?看起来您根本没有尝试过需要实现的方法。我们不会帮你做家庭作业的…还有。。。我们不知道什么是Celda类。@jahroy-但从上下文看不是很明显吗??无论如何,谷歌翻译告诉我这是西班牙语:Lista表示列表,Celda表示单元格。@StephenC-是的,很容易推断Celda表示单元格。我的观点是,我们看不到定义他的Celda类的代码。不管怎样,你都是对的,你的答案是可靠的。+1逐步发展这个。。。一次做一个@杰罗伊-我已经帮你修好了。开心吗?@jahroy我花了一天的时间来做这件事,我没想到会添加我创建的无用代码,因为正如我所说的,它是无用的。。。在我问之前,我试过,当我因为没有选择或者因为我不知道还能做什么而放弃的时候。你想让我分享我的笔记吗?无论如何,谢谢斯蒂芬的帮助。