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

标签 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 复制各个单词 到角色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/

相关文章:

java - 如何使用 Spring Data Neo4J 4 和 IO Platform 1.1.3 制作嵌入式服务器?

Java 形状实用程序

java - Spring data - 域对象继承和泛型方法

java - Wicket Wizard Dropdown modelValue 将不会更新

java - 如何将数据从 JavaScript 传递到 JavaFX

java - java中数组的最大元素个数

java - 什么是NullPointerException,我该如何解决?

java - 将派生类传递给需要覆盖期望基类的方法

java - Hibernate通过java注释将java中的嵌套集合映射到映射表?

java - 使用spring data 1.4.1.RELEASE的MongoDB 3.0连接和认证