Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在我编写的类中重写compareTo方法来比较类中存储的字符串?_Java_String_Comparable_Compareto - Fatal编程技术网

Java 如何在我编写的类中重写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;

我编写了一个类MyClass,每个实例都有一个字符串名称字段。我希望重写compareTo方法,以便在调用时比较每个实例的两个名称字段

以下是我到目前为止的情况:

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实例的示例