Java 字符串的泛型类型和compareTo方法
我用java实现了一个堆。类声明如下所示: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.");
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你能告诉我应该怎么做吗?我解决了它。谢谢你的帮助