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 に答える