2017-04-15 58 views
0

我在編寫構造函數中的匿名比較器時遇到問題。我的指令如下:匿名比較器在構造函數中使用轉換爲Comparable

「你的代碼應該承擔主要類型是可比的,那就是實現可比」

但是,我們使用

private Comparator<K> _comparator; 

我們的數據謝靈運也有私有類節點:

private static class Node<K,V> extends AbstractEntry<K,V> { 
    Node<K,V> left, right; 
    Node(K k, V v) { 
     super(k,v); 
     left = right = null; 
    } 
} 

我也嘗試這樣寫的:

​​

但是這是不正確的,因爲我們不應該比較節點,或者假設該鍵是一個整數。我也應該使用一個未經檢查的轉換到Comparable,我無法弄清楚如何或在哪裏做這件事。

從分配的實際指令如下:

有班上兩個構造函數,你會寫:一個需要比較的密鑰類型,必須不能爲空。另一個不是,但是如果使用這個構造函數,你的代碼應該假設鍵類型是可比的,也就是實現了Comparable。然後這個假設被用來創建一個使用compareTo方法來完成工作的比較器。

任何提示或想法,將不勝感激。

+0

*我們不應該被比較的節點*:你是什麼應該比較?比較器用於什麼?什麼是指示? –

+0

更新了更多信息,希望對您有所幫助。 – mmsky

回答

1

好的。所以你需要編寫一個比較器,用它們的自然順序對可比較的鍵進行排序。即它應該只是委託給他們的compareTo方法。

所以,你要

Comparator<K> comparator = (a, b) -> ((Comparable<K>) a).compareTo(b); 

或者,如果你真的想將它寫成一個匿名內部類:

Comparator<K> comparator = new Comparator<K>() { 
    @Override 
    public int compare(K a, K b) { 
     return ((Comparable<K>) a).compareTo(b); 
    } 
}; 
+0

哦!我懂了。你在比較內部轉換爲Comparable,然後調用compareTo ...我一直試圖在聲明中的某個地方轉換Comparable。非常感謝!我一直在堅持這一點,哈哈。 – mmsky

相關問題