您的位置:首页 > 编程语言 > Java开发

java 基础之Map用法

2016-08-03 15:47 162 查看
参考自:http://chenxiuheng.iteye.com/blog/996385

              http://www.cnblogs.com/kristain/articles/2033566.html

一、java 声明静态Map常量的简单方式

      1、常用的声明方式(使用静态代码块):

      public final static Map map = new HashMap();  

             static {  

             map.put("key1", "value1");  

             map.put("key2", "value2");  

            } 

     2、一种简约的方式:

      public final static Map map = new
HashMap() {{    

             put("key1", "value1");    

             put("key2", "value2");    

       }};  

 
      这种方式,相当于重载HashMap的一个匿名实现。向原有的HashMap中添加了一个匿名构造方法。 

二、取出 Map中key和value的值

       public static void main(String[] args) {

              Map<String, String> map = new HashMap<String, String>();

              map.put("1", "v1");

              map.put("2", "v2");

              for (String key : map.keySet()) {

              System.out.println("key= " + key + " and value= " + map.get(key));

              }

        }

三、遍历Map的四种方法

         public static void main(String[] args) {

         Map<String, String> map = new HashMap<String, String>();

         map.put("1", "value1");

         map.put("2", "value2");

         map.put("3", "value3");

  

        //第一种:普遍使用,二次取值

        System.out.println("通过Map.keySet遍历key和value:");

        for (String key : map.keySet()) {

        System.out.println("key= "+ key + " and value= " + map.get(key));

       }

  

      //第二种

       System.out.println("通过Map.entrySet使用iterator遍历key和value:");

       Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();

       while (it.hasNext()) {

       Map.Entry<String, String> entry = it.next();

       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

      }

       //第三种:推荐,尤其是容量大时

       System.out.println("通过Map.entrySet遍历key和value");

       for (Map.Entry<String, String> entry : map.entrySet()) {

       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

      }

        //第四种

        System.out.println("通过Map.values()遍历所有的value,但不能遍历key");

       for (String v : map.values()) {

         System.out.println("value= " + v);

         }

      }

四、map中不能使用基本数据类型,map转int

         emp.put(1,
"123"); 这个是自动装箱了,相当于emp.put(new Integer(1), "123"); Map emp = new HashMap();创建的是<Object,Object> ,Map中不能使用基本类型的

       
 map转int:Map<String,Integer>
map = new HashMap<String,Integer>();

 
       如果你的Map是Map<String, Integer>的话,且装入的是int值的话,下面这样就可以,1.5之后的Java支持自动装箱/拆箱

         int i = map.get("xxx");

五、HashMap、Hashtable、LinkedHashMap、TreeMap
4000

         一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.

         HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。

          HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

          Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。

          LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。

          在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hashmap java map