确定ArrayList是否有序的通用方法(Java)

时间:2012-02-26 04:33:41

标签: java generics arraylist comparable

我正在尝试编写一个方法来确定ArrayList是否按升序排列。 ArrayList类型可以是Integer,String等。作为一名Java初学者,我花了最后几个小时来了解仿制药,可比较等等。这就是我到目前为止所做的:

static boolean isOrdered(ArrayList<? extends Comparable<?>> a) {
    for(int i=0; i < a.size()-1; i++) {
        if (a.get(i).compareTo(a.get(i+1)) > 0) return false;
    }
    return true;
}

我收到以下编译错误:

  

Comparable类型中的compareTo(捕获#11-of?)方法不适用于参数(捕获#12-of?extends Comparable

从我从阅读中收集到的this我明白这是因为它不确定是否可以进行比较。但是我仍然不确定如何纠正这个问题。

我还是Java的新手(来自Python)。非常感谢任何建议/见解。谢谢!

1 个答案:

答案 0 :(得分:4)

这里的问题是仿制药。解决这个问题的方法是告诉编译器所有元素都属于同一类型,称为T

static <T extends Comparable<T>> boolean isOrdered(ArrayList<T> list)
  ...
}

这意味着整个列表包含某些类型T的所有元素,这些元素支持将值与其他T值进行比较。