向 Map<String, String>中增加加元素 本帖最后由 y11111494 于 2010-01-04 17:27:53 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没看明白你说的什么 向map中加元素,用的是put(K, V) 试试这个:public class MapTest { public static void main(String[] args) { List <Map <String,String>> list = new ArrayList <Map <String,String>>(); Map<String, String> map1 = new HashMap<String, String>(); Map<String, String> map2 = new HashMap<String, String>(); map1.put(new String("书名"), "xml基础"); map1.put(new String("作者"), "张明"); map1.put(new String("售价"), "20.00元"); map2.put(new String("书名"), "java高级教程"); map2.put(new String("作者"), "张明行"); map2.put(new String("售价"), "23.50元"); map2.put(new String("出版社"), "人教社"); list.add(map1); list.add(map2); Map<String, String> map3 = new IdentityHashMap<String, String>(); for(Map map : list){ Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next(); map3.put(pairs.getKey(),pairs.getValue()); } } Iterator it = map3.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next(); System.out.println(pairs.getKey()+"="+pairs.getValue()); } } 不错的问题,3楼正解.就是把list中的map循环拿出来然后加入到map中.理解Map.Entry方法的含义!! 如果想获得“书名”的值怎么办?用map3.get("书名")返回值是null 呵呵。。个人觉得呀。。那些书名,作者,售价,出版社封装成一个class Book{ private String ID; private String bookName; private String author; private String price; private String publish; ... //get/set方法。}然后用map.put(Book.getId,Book)不就更加好。 map3 没有值,你去取 当然是null了。 你这个数据结构就不对。你把这样的数据放置到Map中,那么map.get("书名");这个方法,你希望返回什么???这只会返回最后压入Map的书名value。 在三楼代码中:map1.put(new String("书名"), "xml基础");使用new String("书名")的作用是什么?是表示当有两个“书名”时,这样new就是不同的对象,就会表示不同的键值吗? 所以在map3.get("书名"),或者map3.get(new String("书名"))都会返回null?? 两个字符串相同的话,对应的是同一个。Map在查找Key的时候,先根据传入的key的hashCode()得到的值查找,再根据其equals()的返回值判断找到的那些是否有同一个key。 这种写法确实给从map中读取数据造成了困难,下面换个写法:public class MapTest1 { public static void main(String[] args) { List <Map <String,String>> list = new ArrayList <Map <String,String>>(); Map<String, String> map1 = new HashMap<String, String>(); Map<String, String> map2 = new HashMap<String, String>(); map1.put("书名", "xml基础"); map1.put("作者", "张明"); map1.put("售价", "20.00元"); map2.put("书名", "java高级教程"); map2.put("作者", "张明行"); map2.put("售价", "23.50元"); map2.put("出版社", "人教社"); list.add(map1); list.add(map2); Map<String, List<String>> map3 = new HashMap<String, List<String>>(); for(Map map : list){ Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next(); String key = pairs.getKey(); String value = pairs.getValue(); if(map3.containsKey(key)){ List<String> valueList = map3.get(key); valueList.add(value); }else{ List<String> valueList = new ArrayList<String>(); valueList.add(value); map3.put(key, valueList); } } } Iterator it = map3.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, List<String>> pairs = (Map.Entry<String, List<String>>)it.next(); for(String value : pairs.getValue()){ System.out.println(pairs.getKey()+"="+value); } } } for循环的问题 java代理服务器访问网络的一个问题 java初学者的几点疑问 浏览器无法运行Applet IE应该怎么设置 java 窗口关闭 高手进来看看? 关于 java -verbose:gc参数的问题(在线等待,立刻给分) 请问有没有把数据集转成XML的工具? 关于prepareStatement中的参数 iiop 怎样通过 cisco pix 防火墙(在线等待) 获得Map<String, String> map的值? 求助:实体类图设计
向map中加元素,用的是put(K, V)
List <Map <String,String>> list = new ArrayList <Map <String,String>>();
Map<String, String> map1 = new HashMap<String, String>();
Map<String, String> map2 = new HashMap<String, String>();
map1.put(new String("书名"), "xml基础");
map1.put(new String("作者"), "张明");
map1.put(new String("售价"), "20.00元");
map2.put(new String("书名"), "java高级教程");
map2.put(new String("作者"), "张明行");
map2.put(new String("售价"), "23.50元");
map2.put(new String("出版社"), "人教社");
list.add(map1);
list.add(map2);
Map<String, String> map3 = new IdentityHashMap<String, String>();
for(Map map : list){
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next();
map3.put(pairs.getKey(),pairs.getValue());
}
}
Iterator it = map3.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next();
System.out.println(pairs.getKey()+"="+pairs.getValue());
}
}
就是把list中的map循环拿出来然后加入到map中.理解Map.Entry方法的含义!!
如果想获得“书名”的值怎么办?
用map3.get("书名")返回值是null
那些书名,作者,售价,出版社封装成一个class Book{
private String ID;
private String bookName;
private String author;
private String price;
private String publish;
...
//get/set方法。
}然后用map.put(Book.getId,Book)不就更加好。
你这个数据结构就不对。你把这样的数据放置到Map中,那么map.get("书名");这个方法,你希望返回什么???这只会返回最后压入Map的书名value。
map1.put(new String("书名"), "xml基础");
使用new String("书名")的作用是什么?
是表示当有两个“书名”时,这样new就是不同的对象,就会表示不同的键值吗?
Map在查找Key的时候,先根据传入的key的hashCode()得到的值查找,再根据其equals()的返回值判断找到的那些是否有同一个key。
这种写法确实给从map中读取数据造成了困难,下面换个写法:public class MapTest1 { public static void main(String[] args) {
List <Map <String,String>> list = new ArrayList <Map <String,String>>();
Map<String, String> map1 = new HashMap<String, String>();
Map<String, String> map2 = new HashMap<String, String>();
map1.put("书名", "xml基础");
map1.put("作者", "张明");
map1.put("售价", "20.00元");
map2.put("书名", "java高级教程");
map2.put("作者", "张明行");
map2.put("售价", "23.50元");
map2.put("出版社", "人教社");
list.add(map1);
list.add(map2);
Map<String, List<String>> map3 = new HashMap<String, List<String>>();
for(Map map : list){
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next();
String key = pairs.getKey();
String value = pairs.getValue();
if(map3.containsKey(key)){
List<String> valueList = map3.get(key);
valueList.add(value);
}else{
List<String> valueList = new ArrayList<String>();
valueList.add(value);
map3.put(key, valueList);
}
}
}
Iterator it = map3.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, List<String>> pairs = (Map.Entry<String, List<String>>)it.next();
for(String value : pairs.getValue()){
System.out.println(pairs.getKey()+"="+value);
}
}
}