1

約 20,000,000 エントリのリストがあります。約 5,000,000 のエントリが一意です。リストを反復処理し、一意のエントリを識別し、それぞれに 0 から 5,000,000 までの整数を割り当てる必要があります。

現在、各エントリを順番に TreeSet に追加し、.headSet() を使用してどこに移動したかを調べます。これは最適ではないと思います。

    while((nextline = wholefile.listIterator().next()) != null){

        //sorted, unique, addition
        keywords.add(nextline);

        //hmmm, get index of element in TreeSet?
        k_j = keywords.headSet(nextline).size();

    }

.add() を呼び出したときに場所を取得する方法はありますか?

4

2 に答える 2

2

単純にカウンターとHashMap<Keyword, Integer>. リスト内の各キーワードについて、マップからその位置を取得します。null を取得した場合は、現在のカウンター値を値としてマップにキーワードを配置し、カウンターをインクリメントします。

于 2012-07-23T21:06:10.883 に答える
1

私は次のようにします:

  1. を入力してオブジェクトをカウントしますMap<YourObject, Integer>
  2. このマップを調べて、値 1 にマップされる各キーにシーケンス番号を割り当てます。

コードで...

List<String> keywords = Arrays.asList("a", "b", "c", "a");

Map<String, Integer> counts = new HashMap<String, Integer>();
for (String str : keywords) {
    if (!counts.containsKey(str))
        counts.put(str, 0);

    counts.put(str, counts.get(str) + 1);
}

int seq = 0;
for (String keyword : counts.keySet())
    if (counts.get(keyword) == 1)                      // is unique?
        System.out.println(keyword + " -> " + seq++);  // assign id.
于 2012-07-23T21:07:40.407 に答える