Eigene Queue-Collection programmieren

AvS

Erfahrenes Mitglied
Hi,

ich schreibe gerade eine eigene Queue-Collection und bin mir nicht sicher, ob dass was ich dort gemacht habe so korrekt ist. Es geht um die Methoden zum anfügen und entfernen der Objekte aus der Warteschlange :

Java:
public boolean enqueue(Object o)
	{
		if(o!=null)
		{
			Entry e = new Entry();
			e.data = o;
			e.next = this.tail;
			this.tail = e;
			this.size++;
			return true;
		}
		else
			return false;
	}
	
	public Object dequeue()
	{
		if (this.size > 0)
		{
			Object o = this.head.data;
			this.head = this.head.next;
			this.size--;
			return o;
		}
		return null;
	}
 

Thomas Darimont

Erfahrenes Mitglied
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 * 
 */
public class QueueExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Queue q = new Queue();
        q.enqueue("A");
        q.enqueue("B");
        q.enqueue("C");
        q.dequeue();
        q.enqueue("D");
        q.dequeue();
        q.enqueue("E");
        q.dequeue();
        q.enqueue("F");
        q.enqueue("G");
        q.enqueue("H");
        q.enqueue("I");
        
        
        while(!q.isEmpty()){
            System.out.println(q.dequeue());
        }
        
    }
    
    /**
     * 
     * @author Thomas.Darimont
     * <b>NOT</b> Threadsafe
     */
    static class Queue{
        private Entry head;
        private Entry tail;
        
        private int size;

        public Queue() {
        }
        
        public void enqueue(Object value){
            if(value == null) throw new IllegalArgumentException("value: null values are not allowed here");
            if(tail == null){
                this.head = this.tail = new Entry(value);
            }else{
                Entry entry = new Entry(value);
                tail.next = entry;
                tail = entry;
            }
            size++;
        }
        
        public Object dequeue(){
            if(head != null){
                Entry entry = head;
                head = entry.next;
                entry.next = null;
                size--;
                return entry.value;
            }
            return null;
        }
        
        public boolean isEmpty(){
            return head == null;
        }
        
        public int size(){
            return size;
        }
    }
    
    static class Entry{
        Entry next;
        Object value;

        public Entry(Object value) {
            this.value = value;
        }
    }

}

Gruß Tom
 

AvS

Erfahrenes Mitglied
Hallo,

damit hast du mir sehr weitergeholfen ! Gibt es noch mehr von den de.tutorials-Packages ?
 

zeja

Erfahrenes Mitglied
Gibt es noch mehr von den de.tutorials-Packages ?

*g* Wenn wir Beispiele machen erstellen wir die Klassen eigentlich in einem de.tutorials Package also mit der Forum-Suche könntest du da noch einiges von finden. Es ist aber keine API in dem Sinne.

Und Java bringt schließlich auch eine eigene Queue Klasse mit, deren Sourcecode du auch angucken kannst.
 

AvS

Erfahrenes Mitglied
In der API von Java habe ich zwar die Queue-Collection gefunden, aber keine gescheite Beschreibung der Methoden, die mir da weiterhelfen konnten. Nur halt, welche Parameter die brauchen und was der Return-Wert sein muss.
 

zeja

Erfahrenes Mitglied
Also die Beschreibungen in der API sind wirklich okay. Damit arbeitet die ganze Welt....

So gehts auf jeden Fall:
Java:
public static void main(String[] args) {
	Queue<String> q = new LinkedList<String>();
	q.offer("A");
	q.offer("B");
	q.offer("C");
	q.poll();
	q.offer("D");
	q.poll();
	q.offer("E");
	q.poll();
	q.offer("F");
	q.offer("G");
	q.offer("H");
	q.offer("I");

	while (!q.isEmpty()) {
		System.out.println(q.poll());
	}
}