HashMap<String, String> roleRightsID = new HashMap<String, String>();
重複したキーを追加できる HashMap に似たデータ構造はありますか
例えば
USA, New York
USA, Los Angeles
USA, Chicago
Pakistan, Lahore
Pakistan, Karachi
等
必要なものはマルチマップと呼ばれますが、標準 Java には存在しません。あなたの場合は a でシミュレートできMap<String, List<String>>
ます。
例はhttp://docs.oracle.com/javase/tutorial/collections/interfaces/map.htmlの Multimaps セクションにあります。
前の例を再利用したくない場合は、Apache Commons CollectionsにもMultiMapを使用できます。
HashMap<String,List<String>>
1つのキーに少数の値を保持する必要がある場合に使用できます。
例
HashMap<String,List<String>> map=new HashMap<String,List<String>>();
//to put data firs time
String country="USA";
//create list for cities
List<String> cityList=new ArrayList<String>();
//then fill list
cityList.add("New York");
cityList.add("Los Angeles ");
cityList.add("Chicago");
//lets put this data to map
map.put(country, cityList);
//same thind with other data
country="Pakistan";
cityList=new ArrayList<String>();
cityList.add("Lahore");
cityList.add("Karachi");
map.put(country, cityList);
//now lets check what is in map
System.out.println(map);
//to add city in USA
//you need to get List of cities and add new one
map.get("USA").add("Washington");
//to get all values from USA
System.out.println("city in USA:");
List<String> tmp=map.get("USA");
for (String city:tmp)
System.out.println(city);
重複キーは、一意のキーの概念に違反するため、通常は不可能です。データを表す構造を作成し、ID 番号または一意のキーを別のオブジェクトのセットにマッピングすることで、これに近いことを達成できる場合があります。
例えば:
class MyStructure{
private Integer id
private List<String> cityNames
}
次に、次のことができます。
Map<Integer, MyStructure> roleRightsId = new HashMap<Integer, MyStructure>()
MyStructure item = new MyStructure()
item.setId(1)
item.setCityNames(Arrays.asList("USA", "New York USA")
roleRightsId.put(item.getId(), item)
しかし、私はあなたが達成しようとしていることを見落としている可能性があります。あなたの必要性をさらに説明していただけますか?
通常のハッシュマップで文字列->リストマッピングを使用します。これは、データを保存する方法である可能性があります。
get()
問題は、重複したキーの 1 つを取得したときに何を返したいかということです。
List
通常、最終的に起こるのは、アイテムの a を返すことです。