使用map遇见的问题

1. 如何实现Map中key为泛型,value为泛型集合

 	public static void main(String[] args) {
    
    
        Map<String,List<String>> dataMap = Maps.newHashMap();
        setMap(dataMap);
    }
    
    public static  void setMap(Map<?,?> dataMap){
    
    
            Set<?> dateSet = dataMap.keySet();
            for (Object obj : dateSet) {
    
    
                List<?> dataList = (List<?>) dataMap.get(obj);
            }
    }

2.遇见的错误


private void viewDetail(){
    
    
	Map map1 = new HashMap();
	Map<String,Object> map2 = new HashMap<String,Object>();
	Map<Object,Object> map3 = new HashMap<Object,Object>();
	Map<String,String> map4 = new HashMap<String,String>();
	test1(map1);
	test1(map2);
	test1(map3);	//编译错误
	test1(map4);	//编译错误
}

private void test1(Map<String,Object> map){
    
    
}


在泛型这里 Object 就只表示Object 不能表示所有对象

因为泛型是保证编译时你给的实际类型和参数声明的类型一致,它的意义就在于此,不需要解释,这是需要你学习的规则而已。

那为什么map1就可以呢,这里有历史原因,因为泛型是后加入的,早期的版本没有,但是java的开发者希望不能因为加入泛型就要修改成千上万的现有应用,所以默认他可以通融老版本不加泛型的变量,但是编译时一定会有提示你有危险代码的。

正因为这样,泛型非常的好破,随便写点代码就可以让编译通过,而运行时错误,所以现在开发,一定要使用一种代码,千万不要两者都用,那样太危险,如果你用了泛型,就全部都用,切记切记

3.遍历的方法

  public static void main(String[] args) {
    
    
              Map<String, Object> map = new HashMap<String, Object>();
              map.put("aaa", 111);
              map.put("bbb", 222);
              map.put("ccc", 333);
              map.put("ddd", 444);
              //Map集合循环遍历方式一  
             System.out.println("第一种:通过Map.keySet()遍历key和value:");
            for(String key:map.keySet()){
    
    //keySet获取map集合key的集合  然后在遍历key即可
                String value = map.get(key).toString();//
                System.out.println("key:"+key+" vlaue:"+value);
            }

           //Map集合循环遍历二  通过迭代器的方式
           System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:");
           Iterator<Entry<String, Object>> it = map.entrySet().iterator();
           while(it.hasNext()){
    
    
                Entry<String, Object> entry = it.next();
                System.out.println("key:"+entry.getKey()+"  key:"+entry.getValue());
          }

         // Map集合循环遍历方式三 推荐,尤其是容量大时
        System.out.println("第三种:通过Map.entrySet遍历key和value");
        for (Map.Entry<String, Object> m : map.entrySet()) {
    
    
        System.out.println("key:" + m.getKey() + " value:" + m.getValue());
    }

         // 第四种:
         System.out.println("第四种:通过Map.values()遍历所有的value,但不能遍历key");
        for(Object m:map.values()){
    
    
          System.out.println(m);
        }
   }
}

4.Java Map释放内存置null以及调用clear()的区别

如果你需要将map中的数据清除掉,然后继续使用这个map,就用clear(),如果你是不再使用了,或者想要new一个新的map,那就最好使用null,这样子垃圾回收器才能及时回收内存空间。建议去了解一下垃圾回收机制,你就知道什么情况下用null,什么情况下用clear()

猜你喜欢

转载自blog.csdn.net/RaoSK/article/details/121469757