2

指定された配列内の単語の出現をカウントするプログラムがあります。単語とその量を保持します。たとえば、特定の配列では次のようになります。

String array[] = {"cat", "dog", "cat"}; 

私は猫を 2 匹、犬を 1 匹飼っています。HashMap で作成するのは非常に簡単です。

HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < wordarray.length; i++) {
    String word = wordarray[i].toLowerCase();
    if (map.containsKey(word)) {
        map.put(word, map.get(word) + 1);
    } else {
        map.put(word, 1);
    }
}

次に、それを印刷する必要があります。

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

しかしHashMap、オブジェクトの配列だけを使用せずに作成する方法はありますか?

4

4 に答える 4

4

string 値と int 値を保持するカスタム クラスを作成し、配列を使用してそれらを保持します。擬似コード:

class Myclass
 public int myInt;
 public string MyString;
 //Constructor omited..


//Somewhere else..
MyClass[] my = new Myclass[2];
my[0] = new MyClass("string", 1);
于 2013-06-17T15:49:16.600 に答える
3

Map.Entry キーと値のペアのリスト/配列を作成できます。

でそれを行う方法がすでにありますHashMapentrySet()

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html#entrySet()

于 2013-06-17T15:49:35.273 に答える
1

これは を使用するよりもはるかに遅くなりますHashMapが、動作するはずです:

たとえば、テキスト内に 2 回以上出現する単語がないことを確認したとしますN(上限として、テキスト内の合計単語数を選択できます)。N次に、そのサイズの ArrayList 要素の配列を割り当てることができます。a = new ArrayList[N]; for (int i = 0; i < N; i++) a[i] = new ArrayList<String>();

次に、すべての単語について、その配列を反復処理し、含むインデックスを持つwセルを見つけてから移動します(およびを使用)。セルが見つからない場合は、最初のセルのリストに追加します: .cArrayList<String>wwcc+1list.remove(Object)list.add(Object)wa[0].add(w)

いくつかの最適化:

  • HashSetの代わりに配列で使用しArrayListますが、あなたの場合は不適切に見えます。
  • サイズの配列の配列を使用します[N][N]。メモリ消費量は増えますが、消費される時間は少なくなります。
于 2013-06-17T15:57:34.580 に答える
1

配列を使用して Map の実装を確認できます。これについての素敵な記事はこちら

于 2013-06-17T16:32:57.730 に答える