Я попытался написать общую функцию, которая удаляет повторяющиеся элементы из массива.
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 [], поскольку я сравниваю элементы методом compareTo(), который определен в интерфейсе Comparable.
Я заметил первую строку (объявление метода):
public static <E extends Comparable<E>> ArrayList<E> removeDuplicate(E[] arr) {
Как получилось, что "extends Comparable"?
Сопоставимый интерфейс, поэтому почему он не "реализует Comparable"? Это первый раз, когда я написал универсальную функцию, поэтому я немного запутался в таких деталях. (любое удивление помешало бы мне понять..)
EDIT: эта статья относится к этой теме.