对于Map集合转JSON的思考

来源:互联网 发布:肩膀痛 知乎 编辑:程序博客网 时间:2024/06/05 09:53

首先回顾一下Map的一些基础知识。
Map用于存储键值对,不允许键重复,值可以重复。
(1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。 HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
(2)Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空; 它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。
(3)LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。 在遍历的时候会比HashMap慢。
(4)TreeMap不仅实现了Map接口,还实现了java.util.SortedMap接口。能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。TreeMap不允许对象是null。当用Iteraor遍历TreeMap时,得到的记录是排过序的。

接着就可以开始尝试,对于不同的Map转JSON,都会有什么特征呢?下面贴代码。

public class Test{    String string1,string2="v2",string3="";    String key = "k1",key1 = "k2",key2="",key4="k3";    Map<String,String> treeMap = new TreeMap<String, String>();    Map<String,String> hashMap= new HashMap<String, String>();    //private static final int a = 0; //static变量可以自加,于是这里也测试了一下final变量能否自加,结果final是无法用++的    //private static int a = 0;     public void f(){        //treeMap.put(string1, key); //报错,TreeMap不允许键为null,值可以为null,键值也可以为空字符串""        treeMap.put(key, string1);//k1 null        treeMap.put(key1, string2);//k2 v2        treeMap.put(key2, string2);//"" v2        treeMap.put(key4, string3);//k3 ""        System.out.println("遍历TreeMap:");        for (String key :treeMap.keySet()) {                 System.out.println("key="+key+                      " value="+treeMap.get(key));        }        //HashMap可以有null键以及null值        hashMap.put(string1, key);//null k1        hashMap.put(key, string1);//k1 null        hashMap.put(key1, string2);//k2 v2        hashMap.put(key2, string3);//"" ""        hashMap.put(key4, string3);//k3 ""        System.out.println("遍历HashMap:");        for (String key :hashMap.keySet()) {               System.out.println("key="+key+"  value="+hashMap.get(key));        }        System.out.println("TreeMap转JSON后会忽略掉null值项:"+Common.JSONEncode(map));        System.out.println("HashMap转JSON后也会忽略null值项但不会忽略null键项:"+Common.JSONEncode(map2));        //StringBuffer sb = new StringBuffer();        //sb.append(string1);        //sb.append(string2);        //sb.append(string1+string2);        //System.out.println("String默认值为null:"+sb);        //a++;        //System.out.println(a);    }    public static void main(String[] args){        Test t =new Test();        t.f();    }}

当然代码中没有附上转JSON的方法代码,但是这也不重要,清楚结论就可以了。

原创粉丝点击