-1

私はに関するすべての投稿を何時間も探してきましたLinkedHashMapが、基本が欠けているようです。

db呼び出しからK、Vセットを生成しますが、各セットがどうなるかわかりません。一部のK、Vは処理され、その他は処理されません

マップを繰り返し、位置(indexOf [i] ??)+ K(String)を取得する必要があります。次に、これは別のメソッドに渡され、そのKがどのように処理されるかを尋ねられます(2番目の配列に入れられます)

次に、2番目の配列に基づいて、position [i]を呼び出す必要なK、Vセットを処理します。

すなわち1)情報のためにdbをポーリングし、レコードは次のように返されます-abc txt --def blah --ghi blah --jkl txt 2)レコードをループして2番目のスクリプトに何をすべきかを尋ねます--txtプロセスはこのように.....--blahは何もしません- Kが値を変更する可能性があるため、迅速な参照のためにindexOfを保存します。-必要に応じてK、Vを変更します(スペルミスの修正、スペースの削除、strtolowerなど)3)必要に応じて呼び出しindexOfをさらに処理します(Kは上記のように変更されている可能性があります)

それで、LinkedHashMap使用する正しいタイプはありますか?

PHPの観点からは簡単に思えるので、これについては少し厚くする必要があります。

どんなコード例も素晴らしいでしょう。

4

4 に答える 4

1

Javaのマップは、各Key-Valueマッピングに割り当てられるインデックスの概念をサポートしていません。LinkedHashMapこれは、反復順序が予測可能であるという唯一の利点がある、にも当てはまります。

あなたの質問を完全には理解していませんでしたが、「マップ内のKey-Valueマッピングのインデックスを取得するにはどうすればよいですか」という場合、これは直接不可能です。マップを繰り返し処理して、探しているキーの前に表示されているキーを数えることができますが、もちろんこれはO(n)の複雑さであり、高速ではありません。

PHPでは、デフォルトのデータ構造に配列/リストとマップの組み合わせがあるため、これは異なりますが、Javaではこれらは別個のデータ構造です。

質問をより明確にすれば、おそらく私たちはあなたが使用するのにより適したデータ構造を提供することができます。

于 2012-05-18T11:24:21.367 に答える
1

キーと位置の両方で構造内の要素を効率的に見つけることができる必要があるようです。

標準のJavaコンテナでこれを実現する1つの方法は、を(両方とも同じオブジェクトへの参照を格納する)Mapと組み合わせて使用​​することです。ArrayList前者は、キーによる高速ルックアップを可能にします。後者は、位置によって。

このような構造への挿入はですO(n)。ただし、構造を一度構築し、後で変更しないように思われます。

最後に、キーを指定して要素をすばやく見つける必要がない場合は、を失って、Mapを使用するだけで済みますArrayList

于 2012-05-18T11:32:20.600 に答える
0

あなたの質問は私にはわかりませんが、マップを反復する方法について質問していると思います。

これは次の方法で実行できます。

    Map<String, String> map = new HashMap<String, String>();
    map.put("key1", "value1");
    for (Entry<String, String> entry : map.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
    }
于 2012-05-18T11:16:50.597 に答える
0

あなたが何をしたいのか正確にはわかりません...

public void processDbResult(Map<K, V> map)
{
    // you got sth like this: 
    // Map<K, V> map = new LinkedHashMap<K, V>();
    for (Entry<K, V> entry : map.entrySet())
    {
        K key = entry.getKey();
        V value = entry.getValue();

        Object how = determine(key);

        process(how, entry);
    }
}

private void process(Object how, Entry<K, V> entry)
{
    // do something
}

private Object determine(K key)
{
    // determine processing steps
    return new Object();
}
于 2012-05-18T11:31:33.000 に答える