JAVA 中ArrayList如何去除重复项方法。

<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方法的返回值来判断,添加成功,则代表元素之前不存在,反之,则代表添加的元素是重复元素。

**总之,合适环境使用适当的方式去实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值