解决HashMap不能保证数据顺序问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wobuaizhi/article/details/84105647

最近同事在开发中遇到一个问题,从数据库中查找的使用order by的数据传递到前台后变成无序的。
使用的是mysql + mybatis
一开始以为是数据order by没有生效,复制sql到客户端查看发现是正确的。

后来发现他的映射类型(resultType)是map,外层使用的是HashMap来接受数据,而HahsMap是不能保证顺序的(插入顺序和读取顺序不一致)。
由于大部分代码已经完成,在不大规模修改代码的情况下,选择使用可以保证排序的LinkedHashMap。
下面写几个小demo,对比一下这两个Map的差别:

HashMap:

		Map<String, String> mp = new HashMap<String, String>();
		for (int i=0; i<10; i++) {
			mp.put("key" + i, "value" + i);
		}
		for (Map.Entry<String, String> entry : mp.entrySet()) {
			System.out.println(entry.getKey() + "-" + entry.getValue());
		}

结果,

		key1-value1
		key2-value2
		key0-value0
		key5-value5
		key6-value6
		key3-value3
		key4-value4
		key9-value9
		key7-value7
		key8-value8

LinkedHashMap:

		Map<String, String> mp = new LinkedHashMap<String, String>();
		for (int i=0; i<10; i++) {
			mp.put("key" + i, "value" + i);
		}
		for (Map.Entry<String, String> entry : mp.entrySet()) {
			System.out.println(entry.getKey() + "-" + entry.getValue());
		}

结果,

key0-value0
key1-value1
key2-value2
key3-value3
key4-value4
key5-value5
key6-value6
key7-value7
key8-value8
key9-value9

从结果可以很明显看出,两者的区别。

关于linkedHashMap,这篇文章说的很详细,我就不再赘述了

https://www.cnblogs.com/xiaoxi/p/6170590.html

猜你喜欢

转载自blog.csdn.net/wobuaizhi/article/details/84105647