Как использовать компаратор при работе с абстрактными классами? - PullRequest
0 голосов
/ 08 марта 2020

Я пытался использовать compareTo и реализовывал интерфейс Comparable, но я не могу найти способ сравнить два объекта, чтобы он возвращал целое число (-1, если первый объект меньше, чем второй, 0, если они равны, и 1, если объект 1 больше, чем объект 2). Вот что я пробовал:

public class MyArrayList<E> {

private Object[] array;
private int size;
private int capacity;

public MyArrayList() {
    this.capacity = 1000;
    this.array = new Object[capacity];
    this.size = 0;
}

public boolean add(E element) {
int i = 0;
while(element.compareTo(array[i]) > 0) {
    i++;
    }
this.set(i, element);
return true;
  }
}

Я в основном пытаюсь отсортировать мой MyArrayList, используя сопоставимый. Есть ли у вас какие-либо идеи, как я могу сравнить оба объекта? Спасибо!

1 Ответ

2 голосов
/ 08 марта 2020

Вам нужно принимать только те классы, которые реализуют интерфейс Comparable.

public class MyArrayList<E extends Comparable<E>> {

После этого вам нужно будет привести параметр внутри вашего вызова compareTo к E, так как array относится к типу Object.

public boolean add(E element) {
    int i = 0;
    while (element.compareTo((E) array[i]) > 0) {
        i++;
    }
    this.set(i, element);
    return true;
}
...