为什么这不排序?

时间:2014-04-19 22:33:02

标签: java algorithm

我能够通过实际创建一个新的ArrayList来修复它,每个元素都是一个char数组,我以为我有每个元素char数组的引用,并通过对它进行排序并将其添加到一个新的list,每个元素都是一个排序的char数组。为了提高我对概念的理解,请说清楚。感谢

假设我有一个单词列表,=“Stack”,“Mack”,在一个名为单词的ArrayList中,我想按字母顺序对单词的每个元素进行排序,即sortedWords的元素0应该是ackSt等。我知道如何要做到这一点,但我对于如何通过指向它而无法做到这一点感到惊讶。

              ArrayList<ArrayList<String>> groupedAnagrams = new ArrayList<>();
              ArrayList<char[]> sortedWords = new ArrayList<>();
              for(String word : words){
                  //char[] sortedWord = word.toCharArray();
                  Arrays.sort(word.toCharArray());
                  sortedWords.add(word.toCharArray());
              }

2 个答案:

答案 0 :(得分:3)

这里的问题是在行

中排序的数组
Arrays.sort(word.toCharArray());

消失。参考文件未保存,因此当您致电

sortedWords.add(word.toCharArray());

这是一个新阵列。你需要:

char[] sortedWord = word.toCharArray();
Arrays.sort(sortedWord);
sortedWords.add(sortedWord);

答案 1 :(得分:1)

请查看String#toCharArray()的源代码:

/**
 * Converts this string to a new character array.
 *
 * @return  a newly allocated character array whose length is the length
 *          of this string and whose contents are initialized to contain
 *          the character sequence represented by this string.
 */
public char[] toCharArray() {
    char result[] = new char[count];
    getChars(0, count, result, 0);
    return result;
}

每次它都会返回一个新的char[]

您还没有存储返回的数组,因此排序后排序结果已丢失。