野芦苇知识网(www.yeluwei.com.cn){dj2}{zx1}整理报道:
JAVA 中map和List实现一个键对应多
有一段这样的数据:
quarterNameID[0]=\”1989:1:第1期\”;
quarterNameID[1]=\”1989:2:第2期\”;
quarterNameID[2]=\”1989:3:第3期\”;
quarterNameID[3]=\”1989:4:第4期\”;
quarterNameID[4]=\”1989:5:第5期\”;
quarterNameID[5]=\”1989:6:第6期\”;
quarterNameID[6]=\”1990:1:第1期\”;
quarterNameID[7]=\”1990:2:第2期\”;
quarterNameID[8]=\”1990:3:第3期\”;
quarterNameID[9]=\”1990:4:第4期\”;
quarterNameID[10]=\”1990:5:第5期\”;
quarterNameID[11]=\”1990:6:第6期\”;
quarterNameID[12]=\”1991:1:第1期\”;
quarterNameID[13]=\”1991:2:第2期\”;
quarterNameID[14]=\”1991:3:第3期\”;
quarterNameID[15]=\”1991:4:第4期\”;
quarterNameID[16]=\”1991:5:第5期\”;
quarterNameID[17]=\”1991:6:第6期\”;
quarterNameID[18]=\”1992:1:第1期\”;
quarterNameID[19]=\”1992:2:第2期\”;
quarterNameID[20]=\”1992:4:第4期\”;
我现在已经用正则表达式将分成“1992:2:”这样的单元。现在想在添加在Map<String,List<String>> map=new HashMap<String,List<String>>()中,以实现一个键对应多个值的目标。例如:
键“1991”映射到一个List,List中的值为 1,2,3,4,5,6。
键“1992”映射到一个List,List中的值为 1,2,4。
我写的代码如下:
while(matcher.find()){
String unit=matcher.group();
String year=unit.substring(0,4);
String[] qi=unit.split(\”:\”);
List<String> temp=new ArrayList<String>();
temp.add(qi[1]);
map.put(year, temp);
System.out.println(temp.size());
}
这样做。每次不能实现我想要的效果,问一下各位该怎样修正?
问题补充
我知道每次new 了一个list 不可能实现的 但是不知道怎么改 麻烦各位了
你在取到year的时候,先看一下map中是否已经有了,假如有了map.get(year).add(qi[i]),假如没有再new list。
踏云乘风的感言:
一点就通,多谢了
给你说下大概的思路,
1:先遍历出年来,放到一个数组中,
2:遍历所有数据,年份雷同的期数都放到一个list中,并且把list组成数组;
3:遍历数组,把数组和list数组进行联合同一放到map中。
提问人的追问
这样写进之后,假如要读出1992的list。用get(\”1992\”)就可以返回这个键的list是吧
回答人的补充
是的,但是要留意的是1992的类型必须是string
我有更好的答复收躲转载到QQ空间
整理编辑:野芦苇知识网:www.yeluwei.com.cn
[]版权所有,转载时必须以链接形式注明原始出处及本声明
评论