Wie kann ich Durchlaufen einen Wiederholenden Objekt, wenn der Typ nicht bekannt?

Für eine Hausaufgabe brauche ich zur Umsetzung meiner eigenen PriorityQueue und PriorityQueueSort. Ich verwendet Generika, um es zu arbeiten, ohne die Sortieren-Funktion, aber nun bin ich hier hängengeblieben..

public static void PriorityQueueSort(Iterable<?> list, 
    PriorityQueue<?,?> pq) {
  if (!pq.isEmpty()) {
    throw new IllegalArgumentException("Non-Empty PriorityQueue");
  }

  for (Object obj : list) {

  }
}

Ich übergeben zu müssen, in eine Liste und eine leere PriorityQueue, also meine beste Vermutung auf, wie dies zu tun ist über. Wie sollte ich Sie angreifen, so dass ich die Liste Durchlaufen wird, mit einer unbekannten Art, und fügen Sie jedes element in dieser Liste mit der richtigen Art in die priority queue?


Edit:

Hier sind ein paar details mehr da es wurde festgestellt, dass ich nicht genügend Informationen.

Habe ich eine benutzerdefinierte Klasse PriorityQueue, und ein Eintrag eigene Klasse, die hat einen Schlüssel vom Typ K, und einen Wert vom Typ V.

Ich muss in der Lage sein, Sie zu nehmen, durchsuchbar Liste mit jeder Art T und Durchlaufen, wobei jedes Element und fügen Sie es auf einer anfangs leeren PriorityQueue als ein Schlüssel mit dem Wert null. Ich habe dann ständig anrufen removeMin() auf meinem PriorityQueue und fügen Sie es, um wieder in der gleichen Liste-Objekt.

public class PriorityQueue<K extends Comparable<? super K>,V> {

  private Entry<K,V> _head;
  private Entry<K,V> _tail;
  private int _size;

  public PriorityQueue() {
    this._head = null;
    this._tail = null;
    this._size = 0;
  }

  public int size() {
    return _size;
  }

  public boolean isEmpty() {
    return (size() == 0);
  }

  public Entry<K,V> min() {
    if (_head == null) {
      return null;
    }
    Entry<K,V> current = _head;
    Entry<K,V> min = _head;;

    while (current != null) {
      if (current.compareTo(min) < 0) {
        min = current;
      }
      current = current.getNext();
    }
    return min;
  }

  public Entry<K,V> insert(K k, V x) {
    Entry<K,V> temp = new Entry<K,V>(k,x);
    if (_tail == null) {
      _tail = temp;
      _head = temp;
    }
    else {
      _tail.setNext(temp);
      temp.setPrev(_tail);
      _tail = temp;
    }
    return temp;
  }

  public Entry<K,V> removeMin() {
    Entry<K,V> smallest = min();
    smallest.getPrev().setNext(smallest.getNext());
    smallest.getNext().setPrev(smallest.getPrev());

    return smallest;
  }

  public String toString() {
    return null;
  }

  public static <K> void PriorityQueueSort(Iterable<? extends K> list,
        PriorityQueue<? super K, ?> queue) {

      for (K item : list) {
          queue.insert(item, null);
      }

      list.clear();
  }

  public static void main(String[] args) {
    PriorityQueue<Integer, Integer> pq = 
        new PriorityQueue<Integer, Integer>();

    pq.insert(4, 2);
    pq.insert(5, 1);


    System.out.println(pq.min().toString());
  }
}
Ihre Unterschrift ist gebrochen, und es ermöglicht es mir, fügen Sie ein Iterable<Integer> zu einem PriorityQueue<String>.

InformationsquelleAutor agent154 | 2013-03-08

Schreibe einen Kommentar