Comparable []是存储各种变量的好方法吗?

时间:2012-08-31 09:45:12

标签: java comparable

    Comparable w[] = new Comparable[5];
    w[0] = 1;
    w[1] = "string";
    w[2] = 2.0;

这是一个好方法吗?实际上为什么它可以工作(我只是随机尝试)?也许是因为Comparable扩展了Integers,Strings,Doubles等?那是什么?

6 个答案:

答案 0 :(得分:5)

  

这是一个好方法吗?

如果你不能想出做某事的好理由,那可能不是一个好主意。 ;)

  

也许因为Comparable扩展了Integers,Strings,Doubles等?

Numbers和Strings实现了Comparable,但你有正确的想法。

  

那又怎样?

你可以在Java中做很多奇怪的事情,但是大多数都没有用。 ;)

在这种情况下,它不是特别有用,因为对象不能相互比较。例如Arrays.sort(W);不行。

答案 1 :(得分:2)

这有效,但没有多大意义。 IntegerStringDouble确实实现Comparable接口,但采用通用方式(即Integer实现Comparable<Integer>,{{1}实现String等。)。

因此,如果这是您要实现的目标,那么您将无法将Comparable<String>String进行比较。

答案 2 :(得分:2)

我不认为这是个好主意。如果您必须存储此类“异构”集合,请使用Object[]。 将Comparable指定为公共接口也会给出错误的建议,即您可以对数组进行排序,这是错误的,因为不同的比较器不能合作。

答案 3 :(得分:1)

Comparable w[] = new Comparable[5];

这构造了一个实现类似接口的项目数组。 标准类型的所有包装器都实现了这个接口,所以一切都可以存储在那里。 这样做的缺点是比较方法用于比较同一类的对象。将不同类别的项目放入此容器中会失败。

因此,使用Comparable接口作为容器的基本类型可能是个坏主意。因为它没有意义。

更好的选择是使用Object [],它是所有Java对象的超类型。

答案 4 :(得分:0)

使用类的接口定义要存储在数组或集合中的对象的常用有用属性。

如果您直接或不使用compareTo方法,例如通过对数组进行排序,请选择Comparable。如果不采取对象,因为这对读者来说不那么混乱。如果没有,请注意选择Comparable而不是Object这不会以有用的方式限制数组的对象,因为有许多类实现它(并且它正在增长)。

但请注意,您很少需要存储数组字符串,双精度和整数。事实上,你必须检查你的设计。

答案 5 :(得分:0)

- 所有Wrapper Objects实施Comparable,以及它是如何运作的。

- 此外,当您需要仅根据一个参数进行排序时,可比性很好,但是当您想要<{1}}时,最好使用Comparator strong>以多种方式排序......