Java 如何删除、修改和提取列表中的元素?

Java 如何删除、修改和提取列表中的元素?,java,list,Java,List,我是一名Java初学者,目前正在从事一个几乎已经完成的项目 我需要删除、修改和提取列表中的元素。这是一个基本的元素,尽管我知道有ArrayList。这让我发疯,因为我确切地知道我需要做什么,但我没有得到我应该开始编程的东西 package lec05; import java.util.*; /** * * @author ulacit */ public class Lista { Celda head; public Lista() { head = null; }

我是一名Java初学者,目前正在从事一个几乎已经完成的项目

我需要删除、修改和提取列表中的元素。这是一个基本的元素,尽管我知道有ArrayList。这让我发疯,因为我确切地知道我需要做什么,但我没有得到我应该开始编程的东西

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我花了一天的时间来做这件事,我没想到会添加我创建的无用代码,因为正如我所说的,它是无用的。。。在我问之前,我试过,当我因为没有选择或者因为我不知道还能做什么而放弃的时候。你想让我分享我的笔记吗?无论如何,谢谢斯蒂芬的帮助。