如何优化Java处理大数据量差集操作,list.removeAll性能提升解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1161个文字,预计阅读时间需要5分钟。
今天在优化项目中遇到同步功能时,将考勤机中的数据同步到数据库,两边都是几万条数据的样本。老代码的做法差距不大,半个小时代码优化后,本机差距不超过40秒,服务器速度会更快。
今天在优化项目中的考勤同步功能时遇到将考勤机中的数据同步到数据库,
两边都是几万条数据的样子,老代码的做法差不多半个小时,优化后我本机差不多40秒,服务器速度会更加理想。
两个数据集取差集首先想到的方法便是List.removeAll方法,但是实验发现jdk自带的List.removeAll效率很低
List.removeAll效率低原因:
List.removeAll效率低和list集合本身的特点有关 :
List底层数据结构是数组,查询快,增删慢
1.List.contains()效率没有hashset高
arrayList.removeAll底层是for循化调用contains方法。arrayList虽然用get(index)方法查询效率高,但是若用contains方法查询对象元素,Set集合应该比List效率要高。
因为hashset的contains方法其实是先调用每个元素的hashCode()方法来返回哈希码,如果哈希码的值相等的情况下再调用equals(obj)方法去判断是否相等,只有在这两个方法所返回的值都相等的情况下,才判定这个HashSet包含某个元素,而list直接调用equals(obj)方法.所以hashset效率更高。
本文共计1161个文字,预计阅读时间需要5分钟。
今天在优化项目中遇到同步功能时,将考勤机中的数据同步到数据库,两边都是几万条数据的样本。老代码的做法差距不大,半个小时代码优化后,本机差距不超过40秒,服务器速度会更快。
今天在优化项目中的考勤同步功能时遇到将考勤机中的数据同步到数据库,
两边都是几万条数据的样子,老代码的做法差不多半个小时,优化后我本机差不多40秒,服务器速度会更加理想。
两个数据集取差集首先想到的方法便是List.removeAll方法,但是实验发现jdk自带的List.removeAll效率很低
List.removeAll效率低原因:
List.removeAll效率低和list集合本身的特点有关 :
List底层数据结构是数组,查询快,增删慢
1.List.contains()效率没有hashset高
arrayList.removeAll底层是for循化调用contains方法。arrayList虽然用get(index)方法查询效率高,但是若用contains方法查询对象元素,Set集合应该比List效率要高。
因为hashset的contains方法其实是先调用每个元素的hashCode()方法来返回哈希码,如果哈希码的值相等的情况下再调用equals(obj)方法去判断是否相等,只有在这两个方法所返回的值都相等的情况下,才判定这个HashSet包含某个元素,而list直接调用equals(obj)方法.所以hashset效率更高。

