Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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中对对象数组进行排序?_Java - Fatal编程技术网

在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);