如何在队列类型列表中搜索一个项目,然后在 Java 中更改它?

How to search an item in a queue type list and then change it in Java?

我试图在我的队列类型列表中找到一个节点的项目,它在其中遍历它直到找到它然后替换它,例如:

我有一个“人”对象及其各自的 get 和 set

public class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

我有一个通用“节点”及其相应的 get 和 set

public class Node<E> {

    private E item;
    private Node nextNode;

    public Node(E item) {
        this.item = item;
        this.nextNode = null;
    }
}

最后我有了一个手动通用“队列”及其各自的方法(如添加)

public class QueueList<E> {

    private Node<E> firstNode;
    private Node<E> lastNode;

    public QueueList() {
        this.firstNode = null;
        this.lastNode = null;
    }

    public void add(E item) {
        if (lastNode == null) {
            lastNode = new Node<>(item);
            firstNode = lastNode;
        } else {
            Node<E> newNode = new Node<>(item);
            lastNode.setNext(newNode);
            lastNode = newNode;
        }
    }
}

然后我创建一个队列列表

QueueList<Person> peopleList = new QueueList<>();

peopleList.add(new Person("Mary", 20));
peopleList.add(new Person("John", 24));

也许在某些时候需要更改某人的年龄,所以我会要求用户写下他想要替换年龄的人的名字,(例如我想将约翰的年龄从“24”更改为“25”,我知道它将通过 person.setAge()).

设置

如何通过列表获取人名的节点,然后替换它?

谢谢。 :)

简单的解决方案是全部检查并在找到时更新

  boolean searchAndReplace(QueueList<Person> peopleList, String name, int age) {
        Node current = peopleList.firstNode;
        if(current == null) {
            System.out.println("Queue is empty");
        }
        else {
            while(current != null) {
                //Compares node to be found with each node present in the list
                if(name.equals(((Person)current.getItem()).getName())) {
                    ((Person)current.getItem()).setAge(age);
                    return true;
                }
                current = current.getNextNode();
            }
        }
        return false;
    }

当找到某些东西时,我还向 return 添加了一个布尔值(可能很高兴知道)。

注意

  • 它只会更改找到的第一个。您可能希望在找到时跳过 return 并每次都浏览整个列表。
  • 您不能使用泛型在 QueueList class 中创建方法,因为您不知道可以检查什么。另一种方法是创建一个实现 nodeEquals 和 nodeUpdate 方法的接口