对于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="https://www.it610.com/article/+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="https://www.it610.com/article/+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(); } }

【对于Map集合转JSON的思考】当然代码中没有附上转JSON的方法代码,但是这也不重要,清楚结论就可以了。

    推荐阅读