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;
}
1
A
回答
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;
}
}
UPDATE
我想你實際上是在問因爲是這樣的:
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
的值進行比較。
1
我不知道,但嘗試這個,
有類實現Comparable interface
,這給compareTo
方法。然後,您可以在if語句中使用數字的值(-1表示更少,1表示更多,0表示等於)。
如果你想把這些對象放在列表中(比如,爲了排序),你還應該@覆蓋.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鏈接。
0
我能看到的唯一合乎邏輯的方法是爲我的Node類實現Comparable。僅爲「價值」實例成員實施比較協議似乎不合邏輯。
相關問題
- 1. 如何編寫Control.Lens.AT實例
- 2. 如何初始化實例成員?
- 3. C#:靜態成員VS實例成員
- 4. Form實例成員和靜態成員
- 5. 如何設置彙編關於類實例成員時驗證
- 6. 如何使用必須實現的@BeanProperty成員編寫特質?
- 7. 如何用數據成員和成員函數編寫類C++
- 8. 如何讓每個實例繼承自己的成員實例?
- 9. 鎖定實例或成員爲基礎
- 10. 如何重寫compareTo(Java)
- 11. 如何在Haskell中編寫Data.Vector.Unboxed實例?
- 12. 如何編寫子類的新實例
- 13. JSP類實例成員
- 14. 如何從成員函數中檢測實例是否爲const?
- 15. 如何爲沒有clone()成員的類編寫句柄?
- 16. 如何爲靜態成員編寫std :: is_member_ {object,function} _pointer?
- 17. 如何爲後臺工作人員編寫集成測試
- 18. 如何爲事件成員編寫類型約束?
- 19. 如何爲枚舉編寫「正確」的成員函數?
- 20. 何時創建實例成員?
- 21. 如何爲複雜的底層實體編寫測試用例?
- 22. 如何爲封裝函數的類型編寫任意實例?
- 23. 如何爲實例創建方法編寫doubledispatch?
- 24. 在編譯時編寫成員
- 25. 如何爲例外編寫Junit
- 26. 在一個實例中,如何檢測類成員是否被新實例成員替換?
- 27. 爲什麼在單例類中實例成員是靜態的?
- 28. 我應該如何爲該組的所有成員編寫最大組編號?
- 29. 如何靜態實例化一個依賴實例方法的成員?
- 30. 如何在C++中實例化一個成員變量中的子類實例?
問題是什麼?你有什麼嘗試? – SimonC
我們知道'value'引用的對象的運行時類型嗎? –
其實我需要根據它們的值比較2個節點對象,我想爲實例成員'值'實現比較器。我知道我可以實現一個類節點,但那不是我想要的。我想實現比較值的'價值'。可能嗎 ? – Amber