JAVA 中ArrayList如何去除重复项方法。,javaarraylist
分享于 点击 13129 次 点评:142
JAVA 中ArrayList如何去除重复项方法。,javaarraylist
<pre code_snippet_id="1582784" snippet_file_name="blog_20160219_1_9860537" name="code" class="plain">
Java 中Collection实现类ArrayList如何去除重复项。以下列出了几种方法,以不同的方面去考虑。
(1)通过循环剔除重复项:使用双向的for循环,依次取出集合中元素进行比较。【基本类型。自定义类型自定义比较方法】
public static void removeDuplicate(List list) {
for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { //从左向右循环
for ( int j = list.size() - 1 ; j > i; j -- ) { //从右往左内循环
if (list.get(j).equals(list.get(i))) {
list.remove(j); //相等则移除
}
}
}
System.out.println(list);
}
(2)通过HashSet来过滤重复元素。【注意原始集合中元素顺序已经被打乱】
注意使用hash表时候,要重写集合元素中对象的hashCode和equals方法。
public static void removeDuplicate(List list) {
HashSet h = new HashSet(list); //元素无序
list.clear();
list.addAll(h);
System.out.println(list);
}
其中通过HashSet的带List参数进行构造哈希表。将原始List中所有元素复制到HashSet中。然后再将原始List所有内容删除,最后将过滤掉的无重的元素添加到List中。
其中HashSet带List的构造函数源代码如下:
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); //底层通过hashmap来操作hashset.
addAll(c);
}
(3)最后一种,是考虑到原始集合中元素顺序。也是通过hashSet实现的。但是通过新创建一个List集合将每个通过HashSet过滤的元素依次存入新集合中。
所以就是在原始集合上去除了重复元素,但是元素的相对位置是 不变的。
public static void removeDuplicateWithOrder(List list) {
Set set = new HashSet();
List newList = new ArrayList();
for (Iterator iter = list.iterator(); iter.hasNext();) {
Object element = iter.next();
if (set.add(element))
newList.add(element);
}
list.clear();
list.addAll(newList);
System.out.println( " remove duplicate " + list);
}
public boolean add(E e) {
return map.put(e, PRESENT)==null; //底层通过HashMap的put方法添加元素。
}
其中,判断是否重复,是通过HashSet的add方法的返回值来判断,添加成功,则代表元素之前不存在,反之,则代表添加的元素是重复元素。
**总之,合适环境使用适当的方式去实现。相关文章
- 暂无相关文章
用户点评