Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素
生活随笔
收集整理的這篇文章主要介紹了
Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求:從 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不了解的可以看下Java HashMap原理解析
轉載于:https://www.cnblogs.com/developerzjy/p/11084182.html
總結
以上是生活随笔為你收集整理的Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python实现时间的动态(动态时钟)
- 下一篇: 在windows下的cmd中如何进入与退