您提到使用泛型,然后提到按字母顺序对它们进行排序。泛型不一定是字符串,它们用于表示任何类型,而像字母顺序这样的排序属性意味着字母字符。我的答案假设您期望T
具有字母性质的类型的通用对象。在我的示例中,我专门使用String
您可以将代码设置为搜索要添加的位置而不是提供它。
public void add(T item) {
Node<T> addThis = new Node<T>(item);
Node<T> itr = head;
while (itr.hasNext()) {
if (addThis.compareTo(itr.getNext()) <= 0) { // itr > addThis
addThis.setNext(itr.getNext());
itr.setNext(addThis);
return;
}
itr = itr.getNext();
}
addThis.setNext(null);
itr.setNext(addThis);
return;
} // end add
然后在您的Node
班级中,您可以实现Interface Comparable
. 自从您询问字母顺序以来,我假设您存储了一个字符串。 这个问题 解释了按字母顺序比较字符串。
class Node implements Comparable<Node> {
String value; // ASSUMING YOU ARE USING A STRING AS YOUR GENERIC TYPE T
@Override
public int compareTo(Node otherNode) {
int i;
String thisString = this.getValue();
String otherString = otherNode.getValue();
int minSize = ( otherString.length() > thisString.length() ? thisString.length() : otherString.length() );
for (i = 0; i < minSize; i++) {
if (thisString.charAt(i) > otherString.charAt(i)) {
return 1;
} else if (thisString.charAt(i) < otherString.charAt(i)) {
return -1;
}
}
if (otherString.length() > thisString.length()) {
return 1;
} else if (otherString.length() < thisString.length()) {
return -1;
} else {
return 0;
}
}
// OTHER CLASS CONSTRUCTORS, VARIABLES, AND METHODS
}
为了使用简单的泛型来做到这一点,您需要使用如下实现的类型来实现您的Node
类:T
Comparable
class NodeNode<T extends Comparable<T>> implements Comparable {
T value;
@Override
public int compareTo(Node otherNode) {
return this.getValue().compareTo(otherNode.getValue());
}
// OTHER CLASS CONSTRUCTORS, VARIABLES, AND METHODS
}