#java #generics #junit
#java #универсальные типы #junit
Вопрос:
Я реализовал кучу на Java. Объявление класса выглядит следующим образом:
public class Heap<T extends Comparable<T>> implements HeapInterface<T>
И методы, которые я хотел протестировать, выглядят так:
@Override
public void put(T item) {
if (item == null) {
throw new IllegalArgumentException("Cannot put null item.");
}
items.add(item);
int lastItemId = items.size() - 1;
heapUp(lastItemId);
}
private void heapUp(int childId) {
int parentId = (childId - 1) / 2;
while (childId > 0 amp;amp; isChildBiggerThanParent(childId, parentId)) {
swapItems(childId, parentId);
childId = parentId;
parentId = (childId - 1) / 2;
}
}
И я использовал метод comapreTo:
private boolean isChildBiggerThanParent(int childId, int parentId) {
T childValue = items.get(childId);
T parentValue = items.get(parentId);
return childValue.compareTo(parentValue) > 0;
}
Куча отлично работает для целых, двойных типов и пройденных тестов. Но это не работает для строк. Не могли бы вы посоветовать мне, что мне нужно исправить, чтобы заставить его работать и для строк?
Комментарии:
1. что происходит, когда вы пробуете это со строками?
2. В Java String.compareTo методы сопоставляют строки лексикографически. Это не то, что вы хотите. Лучше всего переопределить то, что вы хотите в идеале для строк
3. условие кучи не поддерживается (например, оно возвращает c,a,b вместо c,b,a)
4. @papaya не могли бы вы дать мне совет, как я должен это сделать?
5. Я решил это. Спасибо за помощь