public class Ch3Ex2 {
static class Node {
Node(Object value) {
this.value = value;
}
Object value; // Comparator for this field required
Node next;
}
static class Stack {
Node Top;
Node Min;
void push(Object value) {
Node node = new Node(value);
if(Top == null) {
Min = node;
} else {
Min = (Min.value < node.value) ? Min : node; // Comparator Needed to be used here
}
node.next = Top;
Top = node;
}
答案 0 :(得分:1)
我不确定但是试试这个,
让类实现Comparable interface
,它提供compareTo
方法。然后,您可以在if语句中使用数字的值(-1表示less,1表示更多,0表示equals)。
如果你想把这些对象放在列表中(例如,用于排序),你也应该@Override .equals方法。
例如:
import java.util.Comparable;
public class BlockOffset implements Comparable<BlockOffset>
{
private int blockNumber;
private int offset;
@Override
public int compareTo(BlockOffset instance2) {
if (this.blockNumber < instance2.blockNumber) return -1;
if (this.blockNumber > instance2.blockNumber) return 1;
if (this.offset < instance2.offset) return -1;
if (this.offset > instance2.offset) return 1;
return 0;
}
}
有关详细信息,请查看this链接。
答案 1 :(得分:0)
我想你要声明你的Node
类:
class Node<T extends Comparable<T>> {
T value;
Node next;
Node(T value) {
this.value = value;
}
}
然后你的Stack
会是这样的:
class Stack<T extends Comparable<T> {
Node<T> Top;
Node<T> Min;
void push(T value) {
Node<T> node = new Node<T>(value);
if(Top == null) {
Min = node;
} else {
Min = Min.value.compareTo(node.value) < 0 ? Min : node;
}
node.next = Top;
Top = node;
}
}
<强>更新强>
我认为你实际要求的是:
class Node<T> {
T value;
Node next;
Node(T value) {
this.value = value;
}
}
class Stack<T> {
Node<T> Top;
Node<T> Min;
final Comparator<T> valueComparer;
public Stack(Comparator<T> valueComparer) { this.valueComparer = valueComparer; }
void push(T value) {
Node<T> node = new Node<T>(value);
if(Top == null) {
Min = node;
} else {
Min = valueComparer.compare(Min.value, node.value) < 0 ? Min : node;
}
node.next = Top;
Top = node;
}
}
这意味着您的值类不需要实现Comparable
,只要构造Stack
对象的类知道如何通过传入Comparator
来比较值。
答案 2 :(得分:0)
我能看到的唯一合乎逻辑的方法是为我的Node类实现Comparable。仅为'value'实例成员实现比较协议似乎不合逻辑。