在java中可比较的是什么?
我知道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);
}
...
}
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());
多态性是最好的 – scerrecrow
@scerrecrow真的吗? – blackHawk
'看起来像Comparable是一种数据类型'咦? – SLaks
我想看看这些代码。以这种方式使用“Comparable”极为罕见。 – ZhongYu
如果你在代码中看到这样的东西,那么它可能不是很好的代码,或者很老,因为'Comparable'是一个* generic *类型,所以所有这些声明都应该提到它的基类型。 –
RealSkeptic