Java 如何在我编写的类中重写compareTo方法来比较类中存储的字符串?
我编写了一个类MyClass,每个实例都有一个字符串名称字段。我希望重写compareTo方法,以便在调用时比较每个实例的两个名称字段 以下是我到目前为止的情况:Java 如何在我编写的类中重写compareTo方法来比较类中存储的字符串?,java,string,comparable,compareto,Java,String,Comparable,Compareto,我编写了一个类MyClass,每个实例都有一个字符串名称字段。我希望重写compareTo方法,以便在调用时比较每个实例的两个名称字段 以下是我到目前为止的情况: public class MyClass implements Comparable<MyClass>{ public String name; public int age; public MyClass(String name) { this.name = name;
public class MyClass implements Comparable<MyClass>{
public String name;
public int age;
public MyClass(String name) {
this.name = name;
this.age = 0;
}
public String getName() {
return this.name;
}
@Override
public int compareTo(MyClass mc) {
return this.name.compareTo(mc.name);
}
}
当我将这个类的实例添加到我编写的有序列表容器中时,它们并没有按照我想要的顺序(即字母顺序)添加。有序列表似乎不是问题,因为我通过添加按正确顺序添加的字符串对其进行了测试
以下是有序列表的添加方法:
public boolean add(E obj) {
Node<E> newNode = new Node(obj);
Node<E> current = head, previous = null;
if (current == null) { // EMPTY list
head = tail = newNode;
currentSize++;
modCounter++;
return true;
}
while (current != null
&& ((Comparable<E>) obj).compareTo(current.data) > 0) {
previous = current;
current = current.next;
}
if (previous == null) { // One item in list, inserted node must go in FIRST position
newNode.next = current;
head = newNode;
} else if (current == null) { // Inserted node must go at the END of the list
previous.next = newNode;
tail = newNode;
} else { // Inserted node is somewhere in the MIDDLE of the list
newNode.next = current;
previous.next = newNode;
}
currentSize++;
modCounter++;
return true;
}
您已经回答了您的问题,但是关于按字母顺序排列字符串,您必须知道的一件事是大小写很重要。如果您在不考虑大小写的情况下严格比较,那么您应该将两个字符串都设置为upcase或downcase:
return this.name.toLowerCase().compareTo(mc.name.toLowerCase());
否则,由于情况的原因,Bravo会出现在alpha之前。我建议将其添加到树中。。。所以你在添加的时候点了它
import java.util.TreeSet;
TreeSet tree = new TreeSet();
tree.add(instanceOfMyClass);
因为u添加了可比较的接口,所以树集知道如何处理它
如果这样做有效,您似乎仍在比较有序列表中的字符串,现在您应该检查compareTo的返回值是否小于/grater/等于0 是的,看起来我确实回答了我自己的问题,我正在修改MyClass文件的副本,而不是我正在测试的那个。对于这个项目,情况并不重要,但我会记住你的建议在未来!谢谢你的帮助。@v我写的一个有序列表容器似乎是他写给我的。不管怎样,他说的是按字母顺序排列字符串,你可以在他的代码中看到,他在比较它们,无论它们在什么情况下,比较都应该是无大小写的。我刚刚用ordered list类中的add方法更新了这个问题,正如@JAMMHe使用他自己的集合所要求的那样,该集合应该在条目中对它们进行排序,因此需要使用不同的集合来执行任务并不是一个很好的答案。@JAMM就像我想从java.util实现一个树一样,我正在从事的项目需要我编写一个有序的列表数据结构。感谢您的回复。您可以使用订购列表中添加功能的比较功能发布零件吗?以及如何创建/添加MyClass实例的示例