Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素
2019-06-25 17:43
2046 查看
需求:从 mAllList 中去除所有 mSubList 中与之重复的元素
测试数据:mAllList 中包含100000个无序无重复字符串,mSubList 中包含50000个无序无重复字符串
方法一、ArrayList中提供的removeAll方法(效率最低)
mAllList.removeAll(mSubList);
某次测试耗时:185665ms
方法二、双重循环(比方法一效率高)
双重循环分为内外两层循环,经过测试,将元素多的list放在外层循环效率更高(mSubList中的元素可能比mAllList多)(被删除元素的列表mAllList放在外层循环和内层循环的实现方式有些差别),这里的测试数据是mAllList中的元素多,实现如下:
int maxSize = mAllList.size(); for (int i = maxSize-1; i >=0; i--) { int size = mSubList.size(); while (size > 0) { String s = mSubList.get(size-1); if (s.equals(mAllList.get(i))) { mSubList.remove(size-1); mAllList.remove(i); break; } size--; } }
某次测试耗时:101510ms
方法三、利用HashMap(效率最高)
//第一步:构建mAllList的HashMap //将mAllList中的元素作为键,如果不是String类,需要实现hashCode和equals方法 //将mAllList中的元素对应的位置作为值 Map<String, Integer> map = new HashMap<>(); for (int i = 0; i < mAllList.size(); i++) { map.put(mAllList.get(i), i); } //第二步:利用map遍历mSubList,查找重复元素 //把mAllList中所有查到的重复元素的位置置空 for (int i = 0; i < mSubList.size(); i++) { Integer pos = map.get(mSubList.get(i)); if (pos==null) { continue; } mAllList.set(pos, null); } //第三步:把mAllList中所有的空元素移除 for (int i = mAllList.size()-1; i>=0; i--) { if (mAllList.get(i)==null) { mAllList.remove(i); } }
某次测试耗时:712ms
方法三的一些说明
- 方法三中初始化HashMap的时候已经知道了容量大小,理论上直接指定HashMap的大小避免扩容可以提高效率,但是测试发现并没有提高,100000条数据都是几十毫秒
- 虽然方法三中HashMap存的值是整数,但是不要使用
int pos = map.get(mSubList.get(i));
取值,会崩溃 - 第二步中,使用
Integer pos = map.get(mSubList.get(i));
取值,然后判断 pos 是否是空来判断map中是否包含键是mSubList.get(i)
的值,比用map.containsKey(key)来判断然后get取值少访问一次哈希表 - 第三步中,从mAllList尾部开始遍历移除
HashMap不了解的可以看下Java HashMap原理解析
相关文章推荐
- FCL应用技巧之------使用List<T>的Distinct()去除重复元素
- Java 去除 ArrayList 集合中的重复元素
- java去除List中重复的元素
- java 两个相同元素的List,合并排序去除重复元素的快速算法
- Java编程:定义功能去除ArrayList中的重复元素
- java 删除ArrayList LinkedList集合中的重复元素
- java 去除List重复元素
- java基础--去除List中重复的元素
- java 去除ArrayList中重复的元素
- java找出2个集合相同和不同的元素(以及去除List中的重复元素)
- [原创]JAVA技巧:去除ArrayList<Object>里面的重复记录
- java 两个相同元素的List,合并排序去除重复元素的快速算法
- python中使用set去除list中的重复元素
- 【Java学习】去除ArrayList集合中的重复元素
- [转]java去除List中重复的元素
- 【java编程】Collection类之ArrayList去除自定义对象的重复元素
- java练习2:去除容器(ArrayList)中重复的元素
- Java在线笔试编程题(1)---list去除重复元素、幸运袋剪枝法、模拟洗牌
- java找出2个集合相同和不同的元素(以及去除List中的重复元素)
- Java 去除ArrayList集合中的重复元素。