对于Map集合转JSON的思考

首先回顾一下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 treeMap = new TreeMap();
    Map hashMap= new HashMap();
    //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的方法代码,但是这也不重要,清楚结论就可以了。

你可能感兴趣的:(java)