1. 程式人生 > 其它 >List 去重

List 去重

技術標籤:JavaList去重

在日常工作中,需要對 List 進行去重的場景很多。對於我這樣一個菜鳥來說,可能能想到的最簡單粗暴的方法就是雙層迴圈去重,但是在看到這篇文章之後,果斷收藏了。

https://mp.weixin.qq.com/s/N1MRYswi8v1Lh6pdDz8upQ

來源於微信公眾號“Java愛好者”,在此表示感謝。若有侵權,請聯絡刪除~

既然剛才說到了簡單粗暴的方法,那麼我們就先來看看這種暴力方法:

1.雙層迴圈

import java.util.*;

public class ListDemo {

    private void removeRepeat(List<Integer> listInt) {

        List<Integer> list = new ArrayList<>(listInt);
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.size(); j++) {
                if (i != j && list.get(i).equals(list.get(j))) {
                    list.remove(list.get(j));
                }
            }
        }
        System.out.println("去重後的list = " + list);
    }

    public static void main(String[] args) {

        ListDemo listDemo = new ListDemo();
        Integer[] array = {1,1,3,5,7,6,4,3,4,5,8,2};
        List<Integer> listInt = Arrays.asList(array);
        System.out.println("去重前的list = " + listInt);
        listDemo.removeRepeat(listInt);
    }
}

此方法不在乎原 List 中的資料的順序。

2.利用 List 的 contains 方法,遍歷迴圈,重新排序,只新增一次資料

import java.util.*;

public class ListDemo {

    private void removeRepeat(List<Integer> listInt) {

        List<Integer> list = new ArrayList<>(listInt.size());
        for (Integer i : listInt) {
            if (!list.contains(i)) {
                list.add(i);
            }
        }
        System.out.println("去重後的list = " + list);
    }

    public static void main(String[] args) {

        ListDemo listDemo = new ListDemo();
        Integer[] array = {1,1,3,5,7,6,4,3,4,5,8,2};
        List<Integer> listInt = Arrays.asList(array);
        System.out.println("去重前的list = " + listInt);
        listDemo.removeRepeat(listInt);
    }
}

這種方法對於 String 型別的 List 同樣適用。

import java.util.*;

public class ListDemo {

    private void removeRepeat(List<String> listStr) {

        List<String> list = new ArrayList<>();
        for (String str : listStr) {
            if (!list.contains(str)) {
                list.add(str);
            }
        }
        System.out.println("去重後的list = " + list);
    }

    public static void main(String[] args) {

        ListDemo listDemo = new ListDemo();
        String[] array = {"A","B","B","C","A","D","E","C","F","D","G"};
        List<String> listStr = Arrays.asList(array);
        System.out.println("去重前的list = " + listStr);
        listDemo.removeRepeat(listStr);
    }
}

3.使用 HashSet

利用 HashSet 不能新增重複資料的特性來對 List 進行去重

import java.util.*;

public class ListDemo {

    private void removeRepeat(List<String> listStr) {

        List<String> list = new ArrayList<>();
        HashSet<String> set = new HashSet<>();
        for (String str : listStr) {
            if (set.add(str)) {
                list.add(str);
            }
        }
        System.out.println("去重後的list = " + list);
    }

    public static void main(String[] args) {

        ListDemo listDemo = new ListDemo();
        String[] array = {"A","B","B","C","A","D","E","C","F","D","G"};
        List<String> listStr = Arrays.asList(array);
        System.out.println("去重前的list = " + listStr);
        listDemo.removeRepeat(listStr);
    }
}

4.使用 java 8 新特性 stream 對 List 進行去重操作

    public static void main(String[] args) {

        String[] array = {"A","B","B","C","A","G","E","C","F","D","G"};
        List<String> listStr = Arrays.asList(array);
        System.out.println("去重前的list = " + listStr);
        List<String> result = listStr.stream().distinct().collect(Collectors.toList());
        System.out.println("去重後的list = " + result);
    }

5.使用 LinkedHashSet 來對 List 進行去重操作

    public static void main(String[] args) {

        String[] array = {"A","B","B","C","A","G","E","C","F","D","G"};
        List<String> listStr = Arrays.asList(array);
        System.out.println("去重前的list = " + listStr);
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>(listStr);
        List<String> result = new ArrayList<>(linkedHashSet);
        System.out.println("去重後的list = " + result);
    }

好了,以上就是對 List 去重的幾種方法。對於我來說,平時工作使用的都是 Java 語言,所以我更傾向於使用 Java 8 新特性的 Stream 去進行去重操作。