JDK1.8的hashmap实现与JDK1.7的差别导致的一个问题
来源:互联网 发布:js 绝对值 math.abs 编辑:程序博客网 时间:2024/06/06 05:32
在项目中,同一段代码在同事的电脑上,和我的电脑上运行的结果不同,部署到tomcat中,网页显示结果为如下:
在同事电脑上运行显示结果为:
在我的电脑上运行显示结果为:
F12查看网页的响应,发现返回的相关数据的顺序不一样。具体如下:
在同事电脑上响应数据为:
"conBehavior":{"uid":276694,"消费等级":"灰领型","支付偏好":"货到付款","买家等级":"新手","近2个月消费":425.00,"近1个月消费":166.00}
在我的电脑上响应数据为:
"conBehavior":{"uid":276694,"近1个月消费":166.00,"消费等级":"灰领型","支付偏好":"货到付款","买家等级":"新手","近2个月消费":425.00}
首先,在eclipse中运行程序,断点调试相关代码。在下图所示程序中加断点和输出:
对应的调用程序,sql语句省略了后半部分:
对于此处理,最终是使用JFinal中的DB+record形式,我输出了record的记录,发现我电脑上的输出已经和同事不一样了。查看record值,发现其内部也使用了hash,因此应该是我们程序运行中hash的算法不同导致的。
查看JDK版本,同事的为1.8,我的是1.7,查找了一下,说是在JDK1.8中,对HashMap的存储结构由链表改成了平衡树。下面是一个参考的源码剖析:http://www.2cto.com/kf/201505/401433.html
经过一番JDK的卸载和重新安装,调试,显示结果正确了。
综上,有两点收获:
1、前端的JS代码处理不具有健壮性,可以考虑获取对应键,进行判断得到值。
2、得熟悉JDK版本的差异,以及部分重要的JDK源码。
- JDK1.8的hashmap实现与JDK1.7的差别导致的一个问题
- SimpleDateFormat在jdk1.6与jdk1.7之间的差别
- JDK1.7 hashMap的简单实现
- jdk1.7 HashMap的实现原理
- HashMap的jdk1.8分析
- JDK1.7的HashMap源码
- 基于jdk1.7的hashmap
- JDK1.8与JDK1.7环境的切换
- HashMap引起的事故:jdk1.7和jdk1.8下的hash函数的不同
- Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析
- HashMap 的 hash函数 jdk1.8
- JDK1.8的HashMap源码分析
- jdk1.8的HashMap和ConcurrentHashMap
- HashMap的工作原理 - JDK1.8
- jdk1.8对HashMap的优化
- jdk1.7的一个bug
- 快速切换jdk1.6、jdk1.7与jdk1.8的bat
- jdk1.5与jdk1.4的版本问题
- 内存的分配方式都有哪些?
- fuzzle
- jmycms
- org.apache.cxf.interceptor.Fault: Could not start Jetty server on port 8,888: Cannot assign requeste
- Spring 实践 -拾遗
- JDK1.8的hashmap实现与JDK1.7的差别导致的一个问题
- 算法竞赛入门经典第二章上机以总结
- 将字符串从m个字符开始由另一个字符串替代
- webApp如何区分android或者IOS系统
- Centos7.0 PHP5.3以上连接SqlServer2008
- 第三周项目1-个人所得税计算器(if语句的嵌套)
- 子贡赎人
- C Looooops poj 2115 扩展欧几里得
- OKHttp源码解析