【发布时间】:2011-03-20 14:16:33
【问题描述】:
我尝试编写从数组中删除重复元素的通用函数。
public static <E extends Comparable<E>> ArrayList<E> removeDuplicate(E[] arr) {
//do quicksort
Arrays.sort(arr);
ArrayList<E> list = new ArrayList<E>();
int i;
for(i=0; i<arr.length-1; i++) {
if(arr[i].compareTo(arr[i+1]) != 0) { //if not duplicate, add to the list
list.add(arr[i]);
}
}
list.add(arr[i]); //add last element
return list;
}
如您所见,您不能传递像 int[] 数组这样的原始类型,因为我通过 Comparable 接口中定义的 compareTo() 方法比较元素。
我注意到第一行(方法声明):
public static <E extends Comparable<E>> ArrayList<E> removeDuplicate(E[] arr) {
怎么会说“扩展可比”?
Comparable 是一个接口,为什么它不是“实现 Comparable”?这是我第一次编写通用函数,所以我对这样的细节有点困惑。 (任何疑惑都会让我无法理解..)
编辑:找到与此主题相关的这篇文章。
【问题讨论】:
-
因为
implements extends extends
标签: java generics comparator