gpt4 book ai didi

java - 如何创建一个在两种泛型类型上运行的可迭代泛型类?

转载 作者:行者123 更新时间:2023-11-29 03:36:28 25 4
gpt4 key购买 nike

如何创建在两个泛型类型上运行的可迭代泛型类?

也就是说,如果我有一个类:

public class PriorityQueue<K,V> {}

我如何实现 Iterable如果我无法使用 implements Iterable<K,V> ? Eclipse 报错说:

Incorrect number of arguments for type Iterable; it cannot be parameterized with arguments

我一定是误解了如何实现我自己的可迭代集合。

关于这个主题:我想让我的优先级队列可迭代,还是让队列存储的条目可迭代?


编辑:

对于我的家庭作业,我必须以链表方式实现 PriorityQueue ADT。除了一个 -- min() 之外,我已经实现了所有方法。 .我正在考虑的方式是遍历所有 Entry通过将对象设为私有(private) 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;
}
}

最佳答案

您必须为返回的 Iterable 对象使用包装类。在您的情况下,我假设它是 Entry 类型。例如,您的代码应如下所示:

public class PriorityQueue<K, V> implements Iterable<Entry<K, V>> {
}

当然,您始终可以创建自定义包装器。

关于java - 如何创建一个在两种泛型类型上运行的可迭代泛型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15282596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com