zoukankan      html  css  js  c++  java
  • java List去除重复数据实现

    作者:多纤果冻

    blog.csdn.net/qq_37939251/article/details/90713643
    注:参照的文章完成的是int类型去重。

    String 类型基本一致,我完成的demo为字符串去重。
    1.使用LinkedHashSet删除arraylist中的重复数据
    LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事:

    删除重复数据
    保持添加到其中的数据的顺序
    Java示例使用LinkedHashSet删除arraylist中的重复项。在给定的示例中,stringList是包含字符串的arraylist,其中一些是重复的字符串。

    例如a,b和c.我们将列表添加到LinkedHashSet,然后将内容返回到列表中。结果arraylist没有重复的字符串。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedHashSet;
    import java.util.List;
    
    public class OTest {
        public static void main(String[] args) {
            ArrayList<String> stringList = new ArrayList<>(Arrays.asList("abc", "abc", "b", "ccc", "ccc", "abc", "ddd", "ddd"));
            System.out.println(stringList);
    
            LinkedHashSet<String> hashSet = new LinkedHashSet<>(stringList);
    
            ArrayList<String> listWithoutDuplicates = new ArrayList<>(hashSet);
    
            System.out.println(listWithoutDuplicates);
    
        }
    }
    

    2.使用java8新特性stream进行List去重
    要从arraylist中删除重复项,我们也可以使用java 8 stream api。使用steam的distinct()方法返回一个由不同数据组成的流,通过对象的equals()方法进行比较。

    收集所有区域数据List使用Collectors.toList()。

    Java程序,用于在不使用Set的情况下从java中的arraylist中删除重复项。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class ListStream {
        public static void main(String[] args) {
            ArrayList<String> stringList = new ArrayList<>(Arrays.asList("abc", "abc", "b", "ccc", "ccc", "abc", "ddd", "ddd"));
            System.out.println(stringList);
    
            List<String> listWithoutDuplicates = stringList.stream().distinct().collect(Collectors.toList());
    
            System.out.println(listWithoutDuplicates);
        }
    }
    

    3.利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件保证顺序:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.List;
    
    public class ListSet {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>(Arrays.asList("abc", "abc", "b", "ccc", "ccc", "abc", "ddd", "ddd"));
            System.out.println(list);
            HashSet<String> set = new HashSet<String>(list.size());
            List<String> result = new ArrayList<String>(list.size());
            for (String str : list) {
                if (set.add(str)) {
                    result.add(str);
                }
            }
            list.clear();
            list.addAll(result);
            System.out.println(list);
        }
    }
    

    执行结果

    4.利用List的contains方法循环遍历,重新排序,只添加一次数据,避免重复:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class ListContains {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>(Arrays.asList("abc", "abc", "b", "ccc", "ccc", "abc", "ddd", "ddd"));
            System.out.println(list);
            List<String> result = new ArrayList<String>(list.size());
            for (String str : list) {
                if (!result.contains(str)) {
                    result.add(str);
                }
            }
            list.clear();
            list.addAll(result);
            System.out.println(list);
        }
    }
    

    执行结果

    5.双重for循环去重

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class ListFor {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>(Arrays.asList("abc", "abc", "b", "ccc", "ccc", "abc", "ddd", "ddd"));
            System.out.println(list);
            for (int i = 0; i < list.size(); i++) {
                for (int j = 0; j < list.size(); j++) {
                    if (i != j && list.get(i) == list.get(j)) {
                        list.remove(list.get(j));
                    }
                }
            }
            System.out.println(list);
        }
    }
    

    执行结果

  • 相关阅读:
    HDU 1075 What Are You Talking About(字典树)
    HDU 1075 What Are You Talking About (stl之map映射)
    HDU 1247 Hat’s Words(字典树活用)
    字典树HihoCoder
    HDU 1277全文检索(字典树)
    HDU 3294 Girls' research(manachar模板题)
    HDU 3294 Girls' research(manachar模板题)
    HDU 4763 Theme Section(KMP灵活应用)
    Ordering Tasks UVA
    Abbott's Revenge UVA
  • 原文地址:https://www.cnblogs.com/stubborn-dude/p/14343852.html
Copyright © 2011-2022 走看看