I’m trying to find an item of a node in my queue type list, in which it goes through it until it finds that and then replace it, for example:
I have a “person” object with its respective get and set
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } }
I have a generic “node” with its respective get and set
public class Node<E> { private E item; private Node nextNode; public Node(E item) { this.item = item; this.nextNode = null; } }
And finally I have a manual generic “queue” with its respective methods (like add)
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; } } }
Then I create a queue list of people
QueueList<Person> peopleList = new QueueList<>(); peopleList.add(new Person("Mary", 20)); peopleList.add(new Person("John", 24));
Maybe at some point someone’s age will need to be changed, so I’ll ask the user to write the person’s name he wants to replace the age, (for example I want to change John’s age from “24” to “25”, and I know it will be set through person.setAge()).
How could I go through the list to get the node of the person’s name, to then replace it?
Thanks. 🙂
Advertisement
Answer
Simple solution would be to check them all and update when found
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; }
I also added a boolean to return when something is found (might be nice to know).
Note that
- it will only change the first one found. You might want to skip the return when found and go through the whole list every time.
- you cannot create the method in the QueueList class with generics as you do not know what you can check against. Alternative is to create an interface that implements a nodeEquals and a nodeUpdate method