HashMap 中的一个“坑”!
共 1008字,需浏览 3分钟
·
2021-11-15 09:49
阅读本文大概需要 3 分钟。
起因
问题展示
import java.util.HashMap;
public class App {
public static void main(String[] args) {
HashMapresult = getList();
result.forEach((k, v) -> {
System.out.println(k + ":" + v);
});
}
// 查询方法(简化版)
public static HashMapgetList() {
HashMapresult = new HashMap<>(); // 最终返回的结果集
// 伪代码:从数据库中查询出了数据,然后对数据进行处理之后,存到了
for (int i = 1; i <= 5; i++) {
result.put("2022-10-" + i, "hello java" + i);
}
return result;
}
}
PS:以上示例代码中,插入元素的顺序是有序的(从 1 到 5),相当于实际业务场景中的 order by。
原因分析
解决方案
稍微麻烦一点但正确的解决方案:将返回的不确定数据类型 HashMap 改为确定的数据类型,比如 List ; 简单一点但并不是最优的解决方案:将无序的 HashMap 改为有序的 LinkedHashMap,此方案的优点是,只需要改动一个单词就可以解决整个问题了。
import java.util.HashMap;
import java.util.LinkedHashMap;
public class App {
public static void main(String[] args) {
HashMapresult = getList();
result.forEach((k, v) -> {
System.out.println(k + ":" + v);
});
}
// 查询方法(简化版)
public static HashMapgetList() {
HashMapresult = new LinkedHashMap<>(); // 最终返回的结果集
// 伪代码:从数据库中查询出了数据,然后对数据进行处理之后,存到了
for (int i = 1; i <= 5; i++) {
result.put("2022-10-" + i, "hello java" + i);
}
return result;
}
}
LinkedHashMap 的魔力
总结
推荐阅读:
阿里领导:手下两个应届生,一个踏实喜欢加班,一个技术强挑活,怎么选?
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
朕已阅