1 つのキーに 3 つの値を格納したい。ハッシュマップは 1 つのキー、1 つの値しか保持できないため、使用できません。では、1 つのキーから値 A/B/C を取得するには、他にどのような方法が必要ですか。
キー: 文字列
値: 文字列/文字列/整数
3 つの値を保持するオブジェクトを作成すると、新しいオブジェクトがキーと値のペアの値になります。
実装例を次に示します。
class TripleValue {
String A;
String B;
int C;
public TripleValue(String a, String b, int c) {
A = a;
B = b;
C = c;
}
}
public static void main() {
Map<String, TripleValue> myMap = new HashMap<String, TripleValue>();
myMap.put("SomeKey", new TripleValue("String1", "String2", 10));
}
方法の 1 つは、キーの値として ArrayList/Set のいずれかを使用することです。
例:
List myTempList = new ArrayList();
myTempList.add("Hi");
myTempList.add("Hello");
myTempList.add("How are you");
myMap.key("key", myTempList);
別のアプローチは、各キーの値の数が常に同じになることがわかっている場合、ホルダー オブジェクトを作成し、そのオブジェクトに値を設定してマップに配置することです。
Javaフレームワークはマルチマップをサポートしていません。それを回避する方法があります。以下を参照してください。
Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();
このライブラリもご覧くださいGuava-libraries
試す
Map<Integer, List<yourObject>> m = new HashMap<>();
次に、キーのリストが存在するかどうかを確認する必要があります。もしそうなら、リストに追加します。それ以外の場合は、ArrayList を作成して追加します
例えば:
public add(String key, MyObj myobj){
if (this.contains(key) ) {
this.get(key).add(myObj);
}else {
List<MyObject> list = new ArrayList<MyObject>();
list.add(myObj);
m.put(key, list);
}
}