Frage zum Schlange-Programm


#1
Moin Leutes!
Ich bastel da gerade wiender an nem kleinen Programm herum.
Folgende codes:
Code:
  //package listenklassen;

public class Queue<ContentType> {
   
   
   
   private class QueueNode {

       private ContentType content = null;
       private QueueNode nextNode = null;

       
       public QueueNode(ContentType pContent) {
           content = pContent;
           nextNode = null;
       }

     
       public void setNext(QueueNode pNext) {
           nextNode = pNext;
       }
       
       public QueueNode getNext() {
           return nextNode;
       }

      
       public ContentType getContent() {
           return content;
       }
       
   }
   
  
   
   private QueueNode head ;
   private QueueNode tail ;


   public Queue() {
       head = null;
       tail = null;
   }

  
   public boolean isEmpty() {
       return head == null;
   }
                                           
   
   
   
   public void enqueue(ContentType pContent) {
       if (pContent != null) {
           QueueNode newNode = new QueueNode(pContent);
           if (this.isEmpty()) {
               head = newNode;
               tail = newNode;
           } else {
               tail.setNext(newNode);
               tail = newNode;
           }
       }
   }

 
   public void dequeue() {
       if (!this.isEmpty()) {
           head = head.getNext();
           if (this.isEmpty()) {
               head = null;
               tail = null;
               System.out.println("Die Schlange ist leer");
           }
       }
   }
   
  
   public ContentType front() {
       if (this.isEmpty()) {
           return null;
       } else {
           return head.getContent();
       }
       
       }
       
   public void sagName(ContentType pContent) {
       System.out.println(((person) pContent).infoName());
   }
}
Code:
class person{
       String name;
       
       public person (String name){
           this.name = name;
       }
   
   public String infoName() {
       return name;
   }
   
}
Code:
public class test {

   public static void main(String[] args) {
       // TODO Auto-generated method stub

       person p1 = new person ("Ezekiel");
       person p2 = new person ("Amenadiel");
       person p3 = new person ("Gabriel");
       person p4 = new person ("Sabbath");
       Queue w = new Queue<person>();
         w.enqueue(p1);
         w.enqueue(p2);
         w.enqueue(p3);
         w.enqueue(p4);

         System.out.println("Erste Person: " + ((person)w.front()).infoName());
         
         w.dequeue();
       System.out.println("Zweite Person: " + ((person)w.front()).infoName());
       
       w.dequeue();
     System.out.println("Dritte Person: " + ((person)w.front()).infoName());
     
     w.dequeue();
     System.out.println("Vierte Person: " + ((person)w.front()).infoName());
     
   
   }

}
Wenn man es ausführt, wird folgendes ausgegeben:
Code:
Erste Person: Ezekiel
Zweite Person: Amenadiel
Dritte Person: Gabriel
Vierte Person: Sabbath

So weit so gut.
Was bzw. wie kann ich jetzt eine Methode implementieren, damit in der Schlange nach jedem Durchlauf der for-Schleife die oberste Person aus der Schleife entfernt und nicht mehr angezeigt wird?

Hoffe jemand hier kann mir helfen.
LG Max
 

melmager

Erfahrenes Mitglied
#2
Da der erste Eintrag in der Variable head gespeichert wird muss man da ansetzen

Code:
public void removeFirst() {
if (head != null) {
 head = head.getNext();
}
}
damit wird der erste Eintrag durch den zweiten Eintrag überschrieben.

PS kuck dir mal
Class ConcurrentLinkedDeque<E>
an :)