Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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方法按字母顺序对字符串的ArrayList排序?_Java_Arraylist_Compareto_Lexicographic - Fatal编程技术网

Java 如何使用compareTo方法按字母顺序对字符串的ArrayList排序?

Java 如何使用compareTo方法按字母顺序对字符串的ArrayList排序?,java,arraylist,compareto,lexicographic,Java,Arraylist,Compareto,Lexicographic,我是一名业余程序员,我创建了一个程序,其中包含一个arraylist,其中包含不同的电话簿联系人,我正在尝试使用compareTo方法对arraylist进行字典排序。我不知道如何在main方法中正确调用该方法,以使其正确排序,并且不允许使用集合排序。有人能帮我吗 以下是我的一些代码: public class Phonebook implements Comparable<Phonebook> { private String first, last;

我是一名业余程序员,我创建了一个程序,其中包含一个arraylist,其中包含不同的电话簿联系人,我正在尝试使用compareTo方法对arraylist进行字典排序。我不知道如何在main方法中正确调用该方法,以使其正确排序,并且不允许使用集合排序。有人能帮我吗

以下是我的一些代码:

public class Phonebook implements Comparable<Phonebook> {
        private String first, last;
        public Contact(String first, String last) {
        this.first = first;
        this.last= last;
}
        public String getFirst() {return first;}
        public String getLast() {return last;}

        public String toString() {
            return first + " " + last;
    }
        public int compareTo(Phonebook another) {
        int a = last.compareTo(another.last);
        int b = first.compareTo(another.first);
        if (a== 0 && b== 0)
            return 0;
        if (a == 0 && b!= 0)
            return b;
        return a;
    }
    }

如果项“较大”,则compare to方法返回1;如果它们相等,则返回0;如果项“较小”,则返回-1

这应该起作用:

int compareTo (PhoneBook o) {
    for(int i = 0; i < first.size(); i++) {
        if (i >= o.first.size())
            return 1;

        if ((int)first.charAt(i) > (int)o.first.charAt(i))
            return -1;

        else if ((int)first.charAt(i) < (int)o.first.charAt(i))
            return 1;
    }

    for(int i = 0; i < last.size(); i++) {
        if (i >= o.last.size())
            return 1;

        if ((int)last.charAt(i) > (int)o.last.charAt(i))
            return -1;

        else if ((int)last.charAt(i) < (int)o.last.charAt(i))
            return 1;
    }

    return 0;
}
int compareTo(电话簿o){
对于(int i=0;i=o.first.size())
返回1;
if((int)first.charAt(i)>(int)o.first.charAt(i))
返回-1;
如果((int)first.charAt(i)<(int)o.first.charAt(i))
返回1;
}
对于(int i=0;i=o.last.size())
返回1;
if((int)last.charAt(i)>(int)o.last.charAt(i))
返回-1;
else如果((int)last.charAt(i)<(int)o.last.charAt(i))
返回1;
}
返回0;
}

这只是检查ASCII值是否更大。(所有字母都必须是小写或大写)

那么,你是否需要将排序算法作为本作业的一部分?Use can reference@Martin'sRun不太可能,我的教授刚刚告诉我们,存储在arraylist中的名称应按compareTo()的排序顺序存储methodComparable和compareTo方法定义了排序,即什么小什么大,但是如果要使用ArrayList,则必须单独进行排序。因为collections.sort是不允许的,我假设其他选项,如list.sort或stream.sorted也不允许?@Martin'sRun是的,它们不允许
import java.util.*;
public static void main(String[] args) {
        // TODO Auto-generated method stub

        PhonebookList list= new PhonebookList();

        Phonebook ph1= new Phonebook ("Brandon","Johnson");
        Phonebook ph2 = new Phonebook ("Samantha","Joseph");

        list.add(ph1);
        list.add(ph2);
}
int compareTo (PhoneBook o) {
    for(int i = 0; i < first.size(); i++) {
        if (i >= o.first.size())
            return 1;

        if ((int)first.charAt(i) > (int)o.first.charAt(i))
            return -1;

        else if ((int)first.charAt(i) < (int)o.first.charAt(i))
            return 1;
    }

    for(int i = 0; i < last.size(); i++) {
        if (i >= o.last.size())
            return 1;

        if ((int)last.charAt(i) > (int)o.last.charAt(i))
            return -1;

        else if ((int)last.charAt(i) < (int)o.last.charAt(i))
            return 1;
    }

    return 0;
}