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
复制各个单词
到角色str
每个 wordArray[i]
中的数组.
首先,我想对存储在 str
中的各个字符进行排序每个 wordArray
.
然后我想对 wordArray
中的每个单词进行排序但我想保留 string
中单词的原始索引供以后使用。
为此,我正在使用此类:
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]]);
}
}
}
但是类种姓异常(exception)发生在 ComparableTimsort 或其他东西中,对此我不知道。
根据我在上一个问题中读到的内容,我们必须覆盖 compareTo
。
但我不知道在哪里覆盖它,我应该在 PrintAnagram
中覆盖它吗? class ,我实际上在其中排序,或者我应该在 WordArray
中覆盖它或在 DuplicateArray
。如果有人有时间解释这些东西,那么请或者你可以给我指出一些资源,其中所有这些都得到了清楚的解释。我对 Java 相当陌生。
异常(exception):
Exception in thread "main" java.lang.ClassCastException: self.study.WordArray cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at self.study.PrintAnagram.printAnagram(PrintAnagram.java:13)
at self.study.AnagramTogether.main(AnagramTogether.java:7)
最佳答案
您的类 WordArray
应实现接口(interface) Comparable
,以便使用 Arrays.sort
函数进行排序。
所以 WordArray
的签名应该是这样的:
public class WordArray implements Comparable<WordArray>
并且类应该实现该方法:
public int compareTo(WordArray compareWordArray)
或者您应该为 sort
方法提供 Comparator
接口(interface)的显式实现。
详情参见 this .
关于java - 在java中对对象数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18419220/