如何在队列类型列表中搜索一个项目,然后在 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 方法的接口
我试图在我的队列类型列表中找到一个节点的项目,它在其中遍历它直到找到它然后替换它,例如:
我有一个“人”对象及其各自的 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 方法的接口