Java 字符串的泛型类型和compareTo方法

Java 字符串的泛型类型和compareTo方法,java,generics,junit,Java,Generics,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.");

我用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 && 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;
}

Heap对于整型、双精度类型和通过的测试工作良好。但它不适用于字符串。您能告诉我需要修复什么才能使它也适用于字符串吗?

当您尝试使用字符串时会发生什么情况?在Java String.compareTo方法中,Comaprestrings按字典顺序排列。这不是你想要的。你最好的办法是覆盖你想要的,理想情况下的Stringsheap条件是不保持(例如它返回c,a,b而不是c,b,a)@papaya你能告诉我应该怎么做吗?我解决了它。谢谢你的帮助