在java中对对象数组进行排序?

时间:2013-08-24 13:43:12

标签: java

public class WordArray {
        public char[] str;
        public int[] index;
}

这是一个在单词数组str

中存储单词的类
public class DuplicateArray {
    WordArray wordArray[];
    int size;

    public static DuplicateArray getDupArray(int size , String string[]){
        DuplicateArray da = new  DuplicateArray();
        da.size = size;
        da.wordArray = new WordArray[da.size];
        for (int i = 0; i < da.size; i++) {
            da.wordArray[i] = new WordArray();
            da.wordArray[i].str = new char[string[i].length()];
            da.wordArray[i].index = new int[da.size];
            da.wordArray[i].str = string[i].toCharArray();
            da.wordArray[i].index[i] = i;       
        }
        return da;

    }
}

此类使用WordArray类并复制String数组string中的单个单词 每个str中的字符wordArray[i]数组。

首先,我想对每个str的{​​{1}}中存储的各个字符进行排序。

然后我想对wordArray中的每个单词进行排序,但我想保留wordArray中单词的原始索引供以后使用。 为此,我正在使用这个类:

string

但Class Caste异常发生在ComparableTimsort或其他东西中,我不知道。 根据我在上一个问题中所读到的内容,我们必须覆盖public class PrintAnagram { public static void printAnagram(String[] string) { DuplicateArray da = DuplicateArray.getDupArray(string.length, string); for (int i = 0; i < string.length; i++) { Arrays.sort(da.wordArray[i].str); } Arrays.sort(da.wordArray); for (int i = 0; i < string.length; i++){ System.out.println(string[da.wordArray[i].index[i]]); } } } 。 但是我不知道在哪里覆盖它,我应该在compareTo类中覆盖它,我实际上在哪里排序,或者我应该在PrintAnagramWordArray中覆盖它。如果有人有时间解释这些东西,那么请你或者你可以指出一些资源,其中所有这些都清楚地解释。我对Java很新。

例外:

DuplicateArray

2 个答案:

答案 0 :(得分:2)

您的班级WordArray应使用Comparable函数实现要对其进行排序的界面Arrays.sort

因此WordArray的签名应该是:

public class WordArray implements Comparable<WordArray>

并且该类应该实现该方法:

public int compareTo(WordArray compareWordArray)

或者您应该提供Comparator方法的sort接口的明确实现。

有关详细信息,请参阅this

答案 1 :(得分:2)

就像@Rahaman说的那样。

或者您可以将比较器定义为第二个参数。

Arrays.sort(da.wordArray, comparator);