私はマップを持っています。キーは、6文字の文字列とPropertiesクラスは、おおよそ以下のように見える含まれています部分的なプロパティを見つける
public class Properties {
private String propertyOne;
private String propertyTwo;
private String propertyThree;
private String propertyFour;
...
...
}
今度は、私は以下のようにマップ内のいくつかのエントリを持っているとしましょう:
41111 - > {1,2,3,4 、5}
41112 - > {1,2,3,4,6-}
41234 - > {1,2,345,87,65}
51123 - > {100,200,30000,345,123 }
51122 - > {} 100,200,30000,556,989
私はmap.get("12567")
をすれば今、私は、所望の特性オブジェクトを取得します。
私が持っている課題は、部分データを保存できるデータ構造を作成する必要があることです。部分データによって私はmap.get("4111")
をすれば、私は交差点のを取得する必要があります意味{1,2,3,4,5}
(プロパティ41111用)
{1,2,3,4,null}.
は同様map.get("41")
が{1,2,null,null,null}
を生成する必要がある(41112のプロパティ)と{1,2,3,4,6}
。
Map<String, Property>`` keyValuesForOneChar
がキーとそれに対応する値として、すべての可能な単一の文字が含まれています
私は今、私のようなすべての可能な部分キーとそれに対応する値を含む複数のハッシュマップを作成しているソリューションを持っています。
Map<String, Property> keyValuesForTwoChars
には、可能なすべての2文字がキーとその対応する値として含まれています。
私はこのソリューションが好きではありませんでした。これはかなり単純ですし、複数のハッシュマップを維持することは良い考えではないと思います。もう1つの問題は、私の生データ数が約200000であり、すべての順列の組み合わせで膨大な部分データが作成され、その膨大な数のハッシュマップのパフォーマンスが低下すると思います。この問題のより良い解決策を提案してください。私は次のような制約があります。
- 解決策は厳密にメモリ内でなければなりません。
- ルックアップが速くなければなりません。そのため、生データの処理とデータ構造の準備に余分な時間とメモリが必要で、それが問題ではない場合は、その理由があります。
@T。 41111、41112、51123、51122と交差するはずのキーとして「11」を見つける必要がある場合、または検索が常にキーの先頭から開始するかどうかをClarverieがお答えしますか? – Rainer
常に最初から開始する必要があります。 –