最新消息:

在java的ArrayList中删除重复的元素

JAVA 大步 1007浏览 0评论
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
完整代码如下:

 

原文:《How to Remove Duplicates from ArrayList in Java
===============================
总结:好吧,原文只是说了使用Set来删除ArrayList中重复元素好,但是却没说为什么。我这里就来分析下两种方法的优异:
利用Set来删除ArrayList中的重复元素不仅简单,而且比使用循环来一一查找删除重复元素要快。因为所谓删除重复元素,其实就是查找元素。如果使用for循环来一一查找,然后删除,那么时间复杂度O(n2),而如果换做是LinkedHashSet,其实和HashSet没太大区别,那么使用了hashtable的方式,则查找元素的时间复杂是O(1),比第一种方法快到哪里去啦。

 

来自为知笔记(Wiz)

 

转载请注明:大步's Blog » 在java的ArrayList中删除重复的元素

SiteMap