哈希表中的数据被覆盖了相同的密钥。我试图以不同的间隔对同一个密钥添加“n”个数据,加入哈希表的数据显然被覆盖了,如何解决这个问题?
if (value == RepeatRule.DAILY) {
setHashRepeatData(repDates, eventBean,
listRepeatEvents);
}
if (value == RepeatRule.WEEKLY) {
setHashRepeatData(repDates, eventBean,
listWeekEvents);
}
private void setHashRepeatData(Vector repDates, EventData eventBean,
Vector listOfRepeatData) {
if (repDates != null) {
System.out.println("the size of repDates is :" + repDates.size());
System.out.println("summ" + eventBean.getSummary());
listOfRepeatData.addElement(eventBean);
for (int i = 0; i < repDates.size(); i++) {
String currentRepDate = (String) repDates.elementAt(i);
System.out.println("currentRepDate" + currentRepDate);
listUserEvents.put(currentRepDate, listOfRepeatData);
}
}
}
我在不同的时间间隔调用上述方法并尝试设置相同密钥的数据。我没有得到如何解决问题。
答案 0 :(得分:1)
您正在寻找多值地图(对于相同的键,您可以拥有多个值)。
您自己实现此功能(将Map<K,V>
更改为Map<K,List<V>>
),但对作者来说有点痛苦。
或者使用提供该功能的Guava:Multimaps(我会推荐这种方法)
答案 1 :(得分:0)
如果您自己动手,这将是您想要实现的示例实现:
// I took a set because I wanted have the inputs sorted
HashMap<String, Set<String>> var = new HashMap<String, Set<String>>();
String key= "key";
String value = "value";
if(var.containsKey(key)){
// the set is already there we can proceed to add the value
} else {
//first time you have to create the List
var.put(key, new TreeSet<String>());
}
var.get(key).add(value);
你必须根据你的情况修改它,如:
HashMap<String, Vector<String>> var = new HashMap<String, Vector<String>>();
String key= "key";
String value = "value";
if(var.containsKey(key)){
// the set is already there we can proceed to add the value
} else {
//first time you have to create the List
var.put(key, new Vector<String>());
}
var.get(key).addElement(value);