网站首页 > 技术文章 正文
工作中需要将表中重复数据只留一条,其余删掉,第一想法就是用SQL去执行,
但是由于数据有几十万条,SQL的效率十分低下,于是写个程序去执行,
也方便看到执行的进度,我是这样做的:
先把表中所有数据的id查出来存进一个ArrayList中(list1),
再将不重复的记录id查出来存进另一个ArrayList(list2),
再将重复数据的最小id查出来存进第三个ArrayList中(list3),
然后开始做差集:
list1.removeAll(list2);
list1.removeAll(list3);
跑起来问题就来了,超慢,查了下原因:
ArrayList 它的时间复杂度最差情况就是O(n*n*m)。
n是list1大小,m是list2大小,那我的天,计算了下我的复杂度有80千兆,难怪这么慢,
于是按照查到的方法将list1类型改为LinkedList,将list2,list3类型改为HashSet,
果然,跑起来一会儿差集就完成了,LinkedList 它的时间复杂度最差情况是O(n*m),
那最差也就千万级的复杂度,小多了,并且LinkedList对于删除操作比ArrayList快多了,
HashSet对于查找比较快,誒,大学那些课都白学了,不说了,先哭会儿
?
猜你喜欢
- 2024-10-16 python数据类型(python数据类型bool)
- 2024-10-16 JavaScript Set、Map、WeakSet 和 WeakMap 的区别?
- 2024-10-16 69-1-10000遗漏了哪些序号#差集#Filter...
- 2024-10-16 进入Python的世界12-常用的程序例子整理二
- 2024-10-16 Java路径-35-Java的HashSet(java路径怎么找)
- 2024-10-16 Redis五种数据类型详解(redis7种数据类型)
- 2024-10-16 那些你不得不知的Redis基础类型常用操作、命令
- 2024-10-16 美团外卖iOS App冷启动治理(美团早启动)
- 2024-10-16 (Python)通过口诀记忆数组、集合、字典、元组
- 2024-10-16 【C++泛型编程】(二)标准模板库 STL
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)