01、使用两个for循环实现List去重(有序)
/**使用两个for循环实现List去重(有序) * * @param list * */
public static List removeDuplicationBy2For(List<Integer> list) {
for (int i=0;i<list.size();i++)
{
for (int j=i+1;j<list.size();j++)
{
if(list.get(i).equals(list.get(j))){
list.remove(j);
}
}
}
return list;
}
02、使用List集合contains方法循环遍历(有序)
/**使用List集合contains方法循环遍历(有序)
*
* @param list
* */
public static List removeDuplicationByContains(List<Integer> list) {
List<Integer> newList =new ArrayList<>();
for (int i=0;i<list.size();i++)
{
boolean isContains =newList.contains(list.get(i));
if(!isContains){
newList.add(list.get(i));
}
}
list.clear();
list.addAll(newList);
return list;
}
03、使用HashSet实现List去重(无序)
/**使用HashSet实现List去重(无序) * * @param list * */
public static List removeDuplicationByHashSet(List<Integer> list) {
HashSet set = new HashSet(list);
//把List集合所有元素清空
list.clear();
//把HashSet对象添加至List集合
list.addAll(set);
return list;
}
04、使用TreeSet实现List去重(有序)
/**使用TreeSet实现List去重(有序) * * @param list * */
public static List removeDuplicationByTreeSet(List<Integer> list) {
TreeSet set = new TreeSet(list);
//把List集合所有元素清空
list.clear();
//把HashSet对象添加至List集合
list.addAll(set);
return list;
}
05、使用java8新特性stream实现List去重(有序)
/**使用java8新特性stream实现List去重(有序) * * @param list * */
public static List removeDuplicationByStream(List<Integer> list) {
List newList = list.stream().distinct().collect(Collectors.toList());
return newList;
}
效率测试代码
public static void main(String args[]) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
List<Integer> list3 = new ArrayList<>();
List<Integer> list4 = new ArrayList<>();
List<Integer> list5 = new ArrayList<>();
Random random =new Random();
for (int i = 0; i < 100000; i++) {
int value =random.nextInt(500);
list1.add(value);
list2.add(value);
list3.add(value);
list4.add(value);
list5.add(value);
}
long startTime ;
long endTime;
startTime = System.currentTimeMillis();
removeDuplicationByHashSet(list1);
endTime = System.currentTimeMillis();
System.out.println("使用HashSet实现List去重时间:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByTreeSet(list2);
endTime = System.currentTimeMillis();
System.out.println("使用TreeSet实现List去重时间:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByStream(list3);
endTime = System.currentTimeMillis();
System.out.println("使用java8新特性stream实现List去重:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationBy2For(list4);
endTime = System.currentTimeMillis();
System.out.println("使用两个for循环实现List去重:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByContains(list5);
endTime = System.currentTimeMillis();
System.out.println("使用List集合contains方法循环遍历:"+(endTime-startTime)+"毫秒");
}
结果:
使用HashSet实现List去重时间:40毫秒
使用TreeSet实现List去重时间:36毫秒
使用java8新特性stream实现List去重:78毫秒
使用两个for循环实现List去重:533毫秒
使用List集合contains方法循环遍历:40毫秒
更多测试结果
随机数在100范围内:
使用HashSet实现List去重时间:32毫秒
使用TreeSet实现List去重时间:40毫秒
使用java8新特性stream实现List去重:128毫秒
使用两个for循环实现List去重:693毫秒
使用List集合contains方法循环遍历:30毫秒
随机数在1000范围内:
使用HashSet实现List去重时间:34毫秒
使用TreeSet实现List去重时间:72毫秒
使用java8新特性stream实现List去重:125毫秒
使用两个for循环实现List去重:1063毫秒
使用List集合contains方法循环遍历:85毫秒
随机数在10000范围内:
使用HashSet实现List去重时间:51毫秒
使用TreeSet实现List去重时间:103毫秒
使用java8新特性stream实现List去重:201毫秒
使用两个for循环实现List去重:5448毫秒
使用List集合contains方法循环遍历:791毫秒
结论
无序HashSet,有序TreeSet
Java 的知识面非常广,面试问的涉及也非常广泛,重点包括:Java 基础、Java 并发,JVM、MySQL、数据结构、算法、Spring、微服务、MQ 等等,涉及的知识点何其庞大,所以我们在复习的时候也往往无从下手,今天小编给大家带来一套 Java 面试题,题库非常全面,包括 Java 基础、Java 集合、JVM、Java 并发、Spring全家桶、Redis、MySQL、Dubbo、Netty、MQ 等等,包含 Java 后端知识点 2000 + ,部分如下:
资料获取方式:关注公众号:“程序员白楠楠”获取上述资料
重要的事情说三遍,转发+转发+转发,一定要记得转发哦!!
今天的文章Java中5种List的去重方法及它们的效率对比,你用对了吗?分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15605.html