1

オブジェクトのArrayListで高速検索を実装したいと思います。これらのオブジェクトは、とりわけ、int oldId、int newId、およびintinListで構成されます。

ここで、リストのCollections.binarySearchを使用してバイナリ検索を実装しようとしましたが、問題は、対応するオブジェクトからnewIdを取得するために、oldIdとinListを使用して検索する必要があることです。例:oldId=9およびinList=1で、別の場所に割り当てられているnewIdを取得しようとしています。基本的にoldId-newIdをマッピングし、それらをグループ化しました。oldIdが重複している可能性がありますが、それらは異なるリストにあり、一意のnewIdを持っている必要があります。

これらのマップオブジェクトにハッシュマップを使用する方が良いと思いますか?または、oldIdおよびinList情報からnewIdを取得するための解決策(おそらくオブジェクトのコンパレーター)はありますか?高速検索アルゴリズムも探しています。

助けてくれてありがとう、私はアイデアに感謝します。

これは私が二分探索のために書いたコンパレータですが、ここにinList情報を追加する方法がわかりませんでした。

public class CompareTermId implements Comparator <MObj>{{

public CompareTermId(){}

public int compare(MObj a, MObj b){

    if(a.oldTermId < b.oldTermId) return 1;
    else if(a.oldTermId > b.oldTermId) return -1;
    else return 0;
}

}

4

3 に答える 3

1

あなたが招待したので、私はHashMapをお勧めします:)

その理由は、HashMapが単一のキーに対して効果的に一定時間のルックアップを提供するためです。

次のようにハッシュマップを作成する場合:

Map<Id, Map<InList, Id>> oldIdToNewIdMap = new HashMap<>();

そして、それを入力します。

Map<InList, Id> inListMap = new HashMap<>();
inListMap.put(oldId, newId);
oldIdToNewIdMap.put(inList, inListMap);

次に、次のように検索できます。

Id newId = oldIdToNewIdMap.get(inList).get(oldId);
于 2010-07-27T01:13:20.060 に答える
0

すべてを1つのクラスにカプセル化し、ListとComparatorを使用してそれらを見つける方がよいと思います。

于 2010-07-27T01:03:33.227 に答える
0

コンパレータを次のようにすると:

public int compare(MObj a, MObj b) {
    if (a.oldTermId < b.oldTermId) return 1;
    else if (a.oldTermId > b.oldTermId) return -1;
    else if (a.inList < b.inList) return 1;
    else if (a.inList > b.inList) return -1;
    else return 0;
}

binarySearchメソッドを使用する場合でも、あなたは金色である必要があります。このコンパレータは、最初にoldTermIdで、次にinList値でアイテムをソートするため、同じoldIDと異なるinList値を持つ2つのアイテムは異なると見なされます。

于 2010-07-27T01:03:45.133 に答える