java arryalist去重复_java删除ArrayList中重复的元素

本文章来为各位同学介绍一篇关于java删除ArrayList中重复的元素的方法,希望这篇教程能够帮助到各位理解删除重复数据算法了。

ArrayList是java集合框架中List接口的最常见的实现。不过,ArrayList里是允许存放相同的元素的。虽然java中有另外一个叫Set的集合专门用来存放不重复的元素。不过可能会遇到这样的需要:我们需要在处理数据之前删除ArrayList中重复的元素。ArrayList自然是没法保证其所有的元素都唯一。

我们有多种方法实现:

1.通过在循环数组的时候,将元素插入到Set中,利用Set的属性来实现删除重复元素。

2.还是循环ArrayList,通过remove()方法,来删除重复元素

不过最简单的方法是将ArrayList拷贝到Set中,例如HashSet,然后再将其拷贝回ArrayList。这样就省去了自己写代码的麻烦。

注意:

1.不过有一点要注意的是,如果你的ArrayList中原本是有顺序的,如果想利用Set去掉重复元素后,其顺序已经保持不变,那么我们必须使用LinkedHashSet,因为HashSet是无序的。

2.如果你自己写代码使用Iterator或者for-each循环删除重复元素,确保你使用的是Iterator的remove()方法,而不是ArrayList自带的remove()方法,这样可以避免ConcurrentModificationException。

java代码实现:

1.将ArrayList中的所有元素拷贝到LinkedHashSet中。为何我们选择LinkedHashSet?因为它能在删除重复的元素的同时,维护原有的插入顺序。

2.清空原来的ArrayList,我们可以使用ArrayList中的clear()方法。

3.将LinkedHashSet(已经没有重复的元素)中所有的元素拷贝到ArrayList。

How to remove duplicates from ArrayList in Java

完整代码如下:

import java.util.ArrayList;

import java.util.LinkedHashSet;

import java.util.List;

import java.util.Set;

/**

* Java Program to remove repeated elements from ArrayList in Java.

*

* @author WINDOWS 8

*/

public class ArrayListDuplicateDemo{

public static void main(String args[]){

// creating ArrayList with duplicate elements

List primes = new ArrayList();

primes.add(2);

primes.add(3);

primes.add(5);

primes.add(7);  //duplicate

primes.add(7);

primes.add(11);

// let's print arraylist with duplicate

System.out.println("list of prime numbers : " primes);

// Now let's remove duplicate element without affecting order

// LinkedHashSet will guaranteed the order and since it's set

// it will not allow us to insert duplicates.

// repeated elements will automatically filtered.

Set primesWithoutDuplicates = new LinkedHashSet(primes);

// now let's clear the ArrayList so that we can copy all elements from LinkedHashSet

primes.clear();

// copying elements but without any duplicates

primes.addAll(primesWithoutDuplicates);

System.out.println("list of primes without duplicates : " primes);

}

}

Output

list of prime numbers : [2, 3, 5, 7, 7, 11]

list of primes without duplicates : [2, 3, 5, 7, 11]

总结:好吧,原文只是说了使用Set来删除ArrayList中重复元素好,但是却没说为什么。我这里就来分析下两种方法的优异:

利用Set来删除ArrayList中的重复元素不仅简单,而且比使用循环来一一查找删除重复元素要快。因为所谓删除重复元素,其实就是查找元素。如果使用for循环来一一查找,然后删除,那么时间复杂度O(n2),而如果换做是LinkedHashSet,其实和HashSet没太大区别,那么使用了hashtable的方式,则查找元素的时间复杂是O(1),比第一种方法快到哪里去啦。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值