2013-08-24 81 views
0
public class WordArray { 
     public char[] str; 
     public int[] index; 
} 

这是存储字的字符数组str排序在java中的对象数组?

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]在一个类。

首先,我想对存储在wordArraystr中的单个字符进行排序。

然后我想对wordArray中的每个单词进行排序,但是我想保留string中单词的原始索引以备后用。 对于我使用这个类:发生在ComparableTimsort什么

但类种姓例外,对此,我也没办法。 从我在前面的问题中读到的内容中,我们必须重写compareTo。 但我不知道在哪里重写它,我是否应该在PrintAnagram类中重写它,我实际上正在分类中,还是应该在WordArrayDuplicateArray中覆盖它。如果任何人有时间来解释这个东西,那么请或者你可以指点我的一些资源,这一切都清楚地解释。我对Java相当陌生。

例外:

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) 
+0

你应该看看http://stackoverflow.com/questions/683041/java-how-do-i-use-a-priorityqueue – Joren

+0

你会在WordArray覆盖的compareTo。它必须知道如何将自己与另一个WordArray进行比较,并确定哪个是“更大”的等等。 –

+0

引用Arrays.sort的文档:按照其自然顺序将指定的对象数组按升序排序元素。 **数组中的所有元素都必须实现Comparable接口**。此外,数组中的所有元素必须相互可比(即e1.compareTo(e2)不得为数组中的任何元素e1和e2抛出ClassCastException)。 –

回答

2

你的类WordArray应实现的接口Comparable使用Arrays.sort功能进行排序。

所以WordArray的签名应该是这样的:

public class WordArray implements Comparable<WordArray> 

和类应该实现的方法:

public int compareTo(WordArray compareWordArray) 

或者你应该提供明确的实施Comparator接口来sort方法。

详情请见this

2

就像@Rahaman说的。

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

Arrays.sort(da.wordArray, comparator);