2015-11-13 111 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