0

我有一个String名为的数组myArray(为了论证,我们只说它包含故事中的单词)。我想将此数组传递给一个方法,该方法将按字母顺序对它们进行排序并分析单词。我在 SO 上查看了这个,很多人建议在这个场景中使用java.util.Arrays.sort(myArray). 所以我在我的方法中使用了这一行,传入myArray,并对其进行了计算,等等。

不过最近引起了我的注意,这个会永久排序myArray.,也就是我出方法后数组还是会排序的。有没有办法让我只在方法范围内对数组进行排序?

示例代码:

public static double uniqueWords(String[] doc1) {

    java.util.Arrays.sort(doc1)

    ... // count up the number of unique words in this array

    return COUNT_OF_UNIQUE_WORDS;
}

public static void main(String[] args) {
    String[] document;
    ... // put values in the array
    System.out.println(uniqueWords(document));
    System.out.println(java.util.Arrays.toString(document));   // here the array will still be sorted, which I DON'T want
}
4

3 回答 3

8
String temp[] = java.util.Arrays.copyOf(doc1,doc1.length);
java.util.Arrays.sort(temp);
于 2012-11-12T19:19:35.500 回答
4

制作数组的副本,对该副本进行排序并使用相同的副本。

  String [] sortedDocuments = new Sting[document.length];
  Systems.arraycopy(document, 0, sortedDocuments , 0, document.length);
  Arrays.sort(sortedDocuments );

或者

  String [] sortedDocuments = Arrays.copyOf(document, document.length);
  Arrays.sort(sortedDocuments );

在您的方法中使用sortedDocuments数组。您的原始数组document保持不变。

于 2012-11-12T19:19:51.667 回答
1

如果您只想计算唯一单词,最好使用以下代码。无需对数组进行排序即可计算唯一元素。

public int countUniqueElements(Object[] array) {
    return new HashSet(Arrays.asList(array)).size();
}
于 2012-11-12T19:22:56.103 回答