Java ArrayList使用技巧 - 兩個ArrayList去除重復的元素


方法一、ArrayList中提供的removeAll方法(效率最低)
List1.removeAll(mSubList);
方法二、雙重循環(比方法一效率高)

雙重循環分為內外兩層循環,經過測試,將元素多的list放在外層循環效率更高(mSubList中的元素可能比List1多)(被刪除元素的列表List1放在外層循環和內層循環的實現方式有些差別),這里的測試數據是List1中的元素多,實現如下:

int maxSize = List1.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(List1.get(i))) { mSubList.remove(size-1); List1.remove(i); break; } size--; } }
方法三、利用HashMap(效率最高)
//第一步:構建list的HashMap,將list中的元素作為鍵,將list中的元素對應的位置作為值
// 如果不是String類,需要實現hashCode,equals方法,equals不一定要調用,但是一定要書寫
Map<String, Integer> map = new HashMap<>(); for (int i = 0; i < List1.size(); i++) { map.put(List1.get(i), i); } //第二步:利用map遍歷mSubList,查找重復元素 //把List1中所有查到的重復元素的位置置空 for (int i = 0; i < mSubList.size(); i++) { Integer pos = map.get(mSubList.get(i)); if (pos==null) { continue; } List1.set(pos, null); } //第三步:把List1中所有的空元素移除 for (int i = List1.size()-1; i>=0; i--) { if (List1.get(i)==null) { List1.remove(i); } }
方法三的一些說明
  1. 方法三中初始化HashMap的時候已經知道了容量大小,理論上直接指定HashMap的大小避免擴容可以提高效率,但是測試發現並沒有提高,100000條數據都是幾十毫秒
  2. 雖然方法三中HashMap存的值是整數,但是不要使用int pos = map.get(mSubList.get(i));取值,會崩潰
  3. 第二步中,使用Integer pos = map.get(mSubList.get(i));取值,然后判斷 pos 是否是空來判斷map中是否包含鍵是mSubList.get(i)的值,比用map.containsKey(key)來判斷然后get取值少訪問一次哈希表
  4. 第三步中,從List1尾部開始遍歷移除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 ArrayList去除重復元素 java集合 collection-list-ArrayList 將自定義對象作為元素存到ArrayList集合中,並去除重復元素。 使用 Java 刪除 ArrayList 中的重復元素 判斷兩個ArrayList元素是否相同 [原創]JAVA技巧:去除ArrayList里面的重復記錄 ArrayList去除重復元素(多種方法實現) 去除ArrayList中重復自定義對象元素 Java中ArrayList問題:刪除一個ArrayList中的重復元素,注意留意一個問題 Collection兩個常見的集合類型: ArrayList可重復集有序 ,HashSet不可重復集 ArrayList去除重復元素(包括字符串和自定義對象)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM