List去重的五種方法


五種不同方法去除 Java 中 ArrayList 的重復數據:

1,使用 LinkedHashSet 刪除 arraylist 中的重復數據

  LinkedHashSet 是在一個 ArrayList 刪除重復數據的最佳方法,LinkedHashSet 在內部完成兩件事: 

    1) 刪除重復數據

    2) 保持添加到其中的數據的順序

  示例代碼:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
 
public class ArrayListExample 
{
    
    public static void main(String[] args)
    {
 
        ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));
 
        System.out.println(numbersList);
 
        LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList);
 
        ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet);
 
        System.out.println(listWithoutDuplicates);
 
    }
 
}

  輸出結果:

[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
 
[1, 2, 3, 4, 5, 6, 7, 8]

2,使用 java8 新特性 stream 進行 List 去重

  要從 arraylist 中刪除重復項,我們也可以使用 java8 stream api,使用 steam 的 distinct() 方法返回一個由不同數據組成的流,通過對象的 equals() 方法進行比較。

  收集所有區域數據 List 使用 Collectors.toList()。

  示例代碼:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class ArrayListExample
{
public static void main(String[] args) { ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));
     System.out.println(numbersList);
List
<Integer> listWithoutDuplicates = numbersList.stream().distinct().collect(Collectors.toList()); System.out.println(listWithoutDuplicates); } }

  輸出結果:

[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
 
[1, 2, 3, 4, 5, 6, 7, 8]

3,利用HashSet不能添加重復數據的特性 由於HashSet不能保證添加順序,所以只能作為判斷條件保證順序

  示例代碼: 

private static void removeDuplicate(List<String> 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);

}

4,利用List的contains方法循環遍歷,重新排序,只添加一次數據,避免重復

  示例代碼:

private static void removeDuplicate(List<String> 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);

}

5,雙重for循環去重

  示例代碼:

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)); 

         } 

    }  

}       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM