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);
}
}
方法三的一些说明
- 方法三中初始化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取值少访问一次哈希表 - 第三步中,从List1尾部开始遍历移除
Java ArrayList使用技巧 - 两个ArrayList去除重复的元素的更多相关文章
- 数据库小技巧:使用distinct去除重复行
这里有2个表 问题question表 楼层question_floor表 需求:已知某用户的id为uid,实现“我的回复”功能,即查看我回复的所有问题 遇到的问题:如果直接对question表和que ...
- List去除重复的元素
有两种方法,一种是去重不带顺序的,一种是去重带顺序的. /* * 方法1: 无顺序 * Hastset根据hashcode判断是否重复,数据不会重复 */ public static Lis ...
- python 列表(list)去除重复的元素总结
方法一: 将list作为set的构造函数构造一个set,然后再将set转换会list就可以 >>> myList = [1, 2, 3, 3, 2, 2, 4, 5, 5] > ...
- vector去除重复的元素
vector<int> v; sort(v.begin(),v.end()); v.erase(unique(v.begin(), v.end()), v.end());
- ArrayList去除重复元素(包括字符串和自定义对象)
1.去除重复字符串 package com.online.msym; import java.util.ArrayList; import java.util.Iterator; @SuppressW ...
- Java实现数组去除重复数据的方法详解
一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer ...
- JAVA数组去除重复数据
一.用List集合实现 , , , , , , ,}; List<Integer> list = new ArrayList<Integer>(); ; i<str. ...
- List集合去除重复对象及equals()、hashCode()方法的作用
原文:https://blog.csdn.net/freelander_j/article/details/52211010 在java中,要将一个集合中重复的对象除去,如果这个集合中的数据类型是基本 ...
- LintCode 521.去除重复元素
LintCode 521.去除重复元素 描述 给一个整数数组,去除重复的元素. 你应该做这些事 1.在原数组上操作 2.将去除重复之后的元素放在数组的开头 3.返回去除重复元素之后的元素个数 挑战 1 ...
随机推荐
- elasticsearch启动常见问题
原文:https://blog.csdn.net/qq_22211217/article/details/80740873 一.Exception in thread "main" ...
- 更新view是可以update到表的
视图不是表,视图里面的数据是通过sql语句去表中查询得到的.当表中的数据发送更改之后,视图里的数据也会发生相应的更改.所以我么一般有两种方式更新视图里面的数据:一是更新表中的数据,从而间接地更新视图中 ...
- 异步ajax请求数据处理
jQuery.ajax(url,[settings]) 概述 通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax ...
- applicationContext-redis.xml配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- JSTL标签的用法详解
在JSP中写Java代码是一件很恶心的事情,代码量少的话还可以,要是多的话,就蛋疼了,整个页面都是<% %>所以EL表达式和JSTL就应运而生了,这里我们注重讲解一下JSTL标签的使用: ...
- 芜湖市2018市队选拔Day2T1
好激动啊,Day2竟然AK了! Day2T1养宠物 Descriptionbadgers是可爱的动物,Smart想拥有一些.宠物店提供N个badgers,编号为1..N,Smart都很喜欢,所以他想拥 ...
- Apache解析漏洞复现(CVE-2017-15715),可以绕过黑名单
照着P神的文章准备复现一下(总结一下经验) 环境的安装 这里面直接使用的vulhub里面的环境来进行安装的(为了方便吗) 基础环境如下  实际上Apache版本在2.4.0~2.4.29即可 i ...
- STM32嵌入式开发学习笔记(一)
本文中,笔者将介绍使用嵌入式开发工具Keil uVision5,使用C语言,对微处理器STM32F103C8进行嵌入式开发. 开发使用C语言,首先需要新建一个C语言文件,将其设为主函数的入口,因此,将 ...
- mongo索引(转)
转自 :https://www.cnblogs.com/efforts-will-be-lucky/p/7324789.html 默认索引 对于每一个集合(除了capped集合),默认会在_id字段 ...
- Java-Class-@I:lombok.extern.slf4j.Slf4j
ylbtech-Java-Class-@I:lombok.extern.slf4j.Slf4j 1.返回顶部 2.返回顶部 1. package com.ylbtech.api.controlle ...