Универсальные типы и метод сравнения для строк

#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. Я решил это. Спасибо за помощь