2015-11-13 84 views
1

我知道Comparable是一個接口,但我看到一些代碼,如ArrayList<Comparable>public Comparable f(),public void f(Comparable a)。 看起來像Comparable是一個類。以上代碼如何實現?在java中可比較的是什麼?

import java.util.*; 
public class MinHeap 
{ 
    public MinHeap() 
    { 
     elements = new ArrayList<Comparable>(); 
     elements.add(null); 
    } 
    .... 
} 

public class BinarySearchTree 
{ 
    ... 
    public void add(Comparable obj) 
    { 
     Node newNode = new Node(); 
     newNode.data = obj; 
     newNode.left = null; 
     newNode.right = null; 
     if (root == null) root = newNode; 
     else root.addNode(newNode); 
    } 
    ... 
} 
+0

'看起來像Comparable是一種數據類型'咦? – SLaks

+0

我想看看這些代碼。以這種方式使用「Comparable」極爲罕見。 – ZhongYu

+1

如果你在代碼中看到這樣的東西,那麼它可能不是很好的代碼,或者很老,因爲'Comparable '是一個* generic *類型,所以所有這些聲明都應該提到它的基類型。 – RealSkeptic

回答

4

Comparable的那些用途意味着它們接受實現Comparable接口的任何類的對象。

但Comparable仍然是一個接口。您無法專門創建Comparable類型的對象,但可以將實現它的類的實例分配給該類型的變量。例如,如果存在實現Comparable的Foo類,例如

public class Foo implements Comparable<Foo> { 
    public int compareTo(Foo o) {...} 
} 

然後我可以將Foo類的對象視爲可比較對象。如果我有這樣一個數組列表:

List<Comparable> list = new ArrayList<Comparable>(); 

我可以把富在它的對象,因爲它們實現可比,例如

list.add(new Foo()); 
+0

多態性是最好的 – scerrecrow

+0

@scerrecrow真的嗎? – blackHawk