2 つのジェネリック型で実行される反復可能なジェネリック クラスを作成するにはどうすればよいですか?
つまり、次のクラスがあるとします。
public class PriorityQueue<K,V> {}
Iterable
使用できない場合、どのように実装できますimplements Iterable<K,V>
か? Eclipseは次のようなエラーを出しています:
タイプ Iterable の引数の数が正しくありません。引数でパラメータ化することはできません
独自の反復可能なコレクションを実装する方法を誤解しているに違いありません。
そして、この主題について: プライオリティキューを反復可能にしたいですか、それともキューが格納するエントリを反復可能にしますか?
編集:
宿題のために、PriorityQueue ADT をリンク リスト形式で実装する必要があります。私はすべてのメソッドを実装しました.1つだけ保存しmin()
ます. 私が考えている方法Entry
は、プライベート メソッドを作成して、リストに格納されているすべてのオブジェクトを反復処理することentries()
です。しかし、私はこれにアプローチする方法がわかりません。
現在、リンクされたリストの先頭へのリンクと末尾へのリンクがあります。エントリentries()
のオブジェクトを返すことができるように、どのようにメソッドを作成できますか?Iterable
ここに私のEntry<K,V>
オブジェクトがあります:
public class Entry<K,V> implements Comparable {
private V _value;
private K _key;
private Entry<K,V> _prev;
private Entry<K,V> _next;
public Entry(K key, V value) {
this._value = value;
this._key = key;
this._prev = null;
this._next = null;
}
public V getValue() {
return this._value;
}
public K getKey() {
return this._key;
}
public Entry<K,V> getNext() {
return _next;
}
public void setNext(Entry<K,V> link) {
this._next = link;
}
public Entry<K,V> getPrev() {
return _prev;
}
public void setPrev(Entry<K,V> link) {
this._prev = link;
}
@Override
public int compareTo(Object arg0) {
if (arg0 instanceof Entry<?,?>) {
}
return 0;
}
}
そして、ここに私のPriorityQueue<K,V>
これまでのところがあります:
public class PriorityQueue<K,V> implements Iterable<K>{
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() {
}
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;
}
@Override
public Iterator<K> iterator() {
// TODO Auto-generated method stub
return null;
}
}