Поскольку вы предполагаете, что T
реализует Comparable<T>
(путем приведения targetElement
), вы должны использовать эту функцию.Метод equals
, который вы используете для сравнения comparableElement
и iter.next()
, является методом, унаследованным от класса Object
, и, возможно, не был переопределен T
.Реализация по умолчанию метода equals
просто сравнивает адреса памяти вызывающей стороны и аргумента, который, вероятно, не тот, который вам нужен.
Метод compareTo
Comparable<T>
фактически будет реализован T
поэтому вы должны использовать его вместо.compareTo
возвращает int
, который указывает, что вызывающая сторона меньше аргумента, если он отрицательный, вызывающая сторона больше аргумента, если он положительный, или вызывающая сторона равна аргументу, если он равен нулю.Следовательно, вы должны изменить выражение ((Comparable<T>) comparableElement).equals(iter.next())
на comparableElement.compareTo(iter.next()) == 0
.Приведение comparableElement
не является необходимым, поскольку переменная уже имеет тип Comparable<T>
.
Вот как выглядит изменение в вашем коде.
public void removeAllOccurrences(T targetElement) throws ElementNotFoundException {
removeElement(targetElement);
Comparable<T> comparableElement = (Comparable<T>) targetElement;
Iterator<T> iter = iteratorInOrder();
int n = 0;
while(iter.hasNext()) {
if (comparableElement.compareTo(iter.next()) == 0) {
n++;
}
}
for (int i = 0; i < n; i++) {
removeElement(targetElement);
}
}
Дайте мне знать, еслиЯ неправильно понял ваш вопрос.