我想存储具有多个值的地图键。 例如:我从ArrayList读取字符串的键,从另一个ArrayList读取整数值:
Keys Values
humans 50
elfs 20
dwarfs 30
humans 40
elfs 10
我希望存储这样的信息:Map< String,ArrayList<整数>>
[humans = {50,40}]
[elfs = {20,10}]
[dwarfs = {30}]
有可能这样做吗?
答案 0 :(得分:3)
我建议使用Guava MultiMap。或者,你的
Map<String, ArrayList<Integer>>
也将实现这一目标。在执行put
时,确定是否已存在与密钥关联的列表;如果有,那么put
将是get(key).add(value)
,否则它将是put(new List(value))
。同样地,remove
将从关联列表中删除值,否则将完全删除列表,如果这将导致空列表。
此外,Map<String, HashSet<Integer>>
可能会比列表地图带来更好的表现;如果要将重复值与键关联,显然不要这样做。
答案 1 :(得分:2)
我这样做:
public class StringToListInt {
private Map<String, List<Integer>> stringToListInt;
public StringToListInt() {
stringToListInt = new HashMap<String, List<Integer>>();
}
public void addInt( String string, Integer someValue ) {
List<Integer> listInt = stringToListInt.get( string );
if ( listInt == null ) {
listInt = new ArrayList<String>();
stringToListInt.put( string, listInt );
}
listInt.add( someValue );
}
public List<Integer> getInts( String string ) {
return stringToListInt.get( string );
}
}
如果你添加一些泛型,我想你会得到一些非常类似于Guava的MultiMap而没有依赖的东西。