首先回顾一下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的方法代码,但是这也不重要,清楚结论就可以了。
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)