欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

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

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

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

相关文章

    暂无相关文章

用户点评