本帖最后由 y11111494 于 2010-01-04 17:27:53 编辑

解决方案 »

  1.   

    没看明白你说的什么 
    向map中加元素,用的是put(K, V)
      

  2.   

    试试这个: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.   

    不错的问题,3楼正解.
    就是把list中的map循环拿出来然后加入到map中.理解Map.Entry方法的含义!!
      

  4.   


    如果想获得“书名”的值怎么办?
    用map3.get("书名")返回值是null

      

  5.   

    呵呵。。个人觉得呀。。
    那些书名,作者,售价,出版社封装成一个class Book{
         private String ID;
         private String bookName;
         private String author;
         private String price;
         private String publish;
         ...
         //get/set方法。
    }然后用map.put(Book.getId,Book)不就更加好。
      

  6.   

    map3 没有值,你去取 当然是null了。
      

  7.   


    你这个数据结构就不对。你把这样的数据放置到Map中,那么map.get("书名");这个方法,你希望返回什么???这只会返回最后压入Map的书名value。
      

  8.   

    在三楼代码中:
    map1.put(new String("书名"), "xml基础");
    使用new String("书名")的作用是什么?
    是表示当有两个“书名”时,这样new就是不同的对象,就会表示不同的键值吗?

      

  9.   

    所以在map3.get("书名"),或者map3.get(new String("书名"))都会返回null??
      

  10.   

    两个字符串相同的话,对应的是同一个。
    Map在查找Key的时候,先根据传入的key的hashCode()得到的值查找,再根据其equals()的返回值判断找到的那些是否有同一个key。
      

  11.   


    这种写法确实给从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);
            }
        }

    }