在java中对对象数组进行排序?
这是一个在字符数组在java中对对象数组进行排序?,java,Java,这是一个在字符数组str public class WordArray { public char[] str; public int[] index; } 但是阶级种姓例外发生在类似的事情上,我不知道。 根据我在上一个问题中所读到的内容,我们必须将比较器改写为。 但是我不知道在哪里重写它,我应该在PrintAnagram类中重写它,在实际排序的地方,还是应该在WordArray或DuplicateArray中重写它。如果有人有时间解释这些东西,那么请或者你可以
str
public class WordArray {
public char[] str;
public int[] index;
}
但是阶级种姓例外发生在类似的事情上,我不知道。
根据我在上一个问题中所读到的内容,我们必须将比较器改写为
。
但是我不知道在哪里重写它,我应该在PrintAnagram
类中重写它,在实际排序的地方,还是应该在WordArray
或DuplicateArray
中重写它。如果有人有时间解释这些东西,那么请或者你可以给我指一些资源,在那里所有这些都被清楚地解释了。我对Java相当陌生
例外情况:
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]]);
}
}
}
您的类
WordArray
应该实现使用array.sort
函数排序的接口Comparable
因此WordArray
的签名应该是:
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)
或者,您应该为sort
方法提供Comparator
接口的显式实现
有关详细信息,请参见。您的类
WordArray
应实现使用数组进行排序的接口compariable
因此WordArray
的签名应该是:
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)
或者,您应该为sort
方法提供Comparator
接口的显式实现
有关详细信息,请参见。,正如@Rahaman所说
也可以将比较器定义为第二个参数
public int compareTo(WordArray compareWordArray)
正如@Rahaman所说
也可以将比较器定义为第二个参数
public int compareTo(WordArray compareWordArray)
你应该看看你在WordArray中重写了compareTo。它必须知道如何将自己与另一个WordArray进行比较,并确定哪个更大,等等。引用数组。排序的文档:根据元素的自然顺序,将指定的对象数组按升序排序。数组中的所有元素都必须实现可比较的接口。此外,数组中的所有元素都必须是相互可比的(即e1。compareTo(e2)不能为数组中的任何元素e1和e2抛出ClassCastException)。如果排序是主要因素,为什么不使用某种集合呢?您应该看看是否会在WordArray中重写compareTo。它必须知道如何将自己与另一个WordArray进行比较,并确定哪个更大,等等。引用数组。排序的文档:根据元素的自然顺序,将指定的对象数组按升序排序。数组中的所有元素都必须实现可比较的接口。此外,数组中的所有元素必须相互可比(即e1.compareTo(e2)不能为数组中的任何元素e1和e2抛出ClassCastException)。如果排序是主要因素,为什么不使用某种集合呢?
Arrays.sort(da.wordArray, comparator);