Java中List去重处理

本文介绍三种删除ArrayList中重复元素的方法,包括循环元素删除、利用HashSet剔除及保持原有顺序删除等,适用于不同场景需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:循环元素删除
// 删除ArrayList中重复元素

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

方法二:通过HashSet剔除
// 删除ArrayList中重复元素

public static void removeDuplicate(List list)   { 
    HashSet h  =   new  HashSet(list); 
    list.clear(); 
    list.addAll(h); 
    System.out.println(list); 
}

方法三: 删除ArrayList中重复元素,保持顺序
// 删除ArrayList中重复元素,保持顺序

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); 
} 
### Java 中对 List 进行的方法 在 Java 编程中,`List` 是一种常见的集合类型,用于存储一组有序的对象。然而,由于 `List` 允许存在复元素,在实际开发过程中可能需要对其进行处理。以下是几种常用的方法及其示例代码。 #### 方法一:通过循环遍历手动 此方法的核心思想是创建一个新的列表来保存唯一值,并逐一检查原列表中的每个元素是否已存在于新列表中。如果不存在,则将其加入新列表。 ```java public static void removeDuplicatesWithLoop() { List<Integer> list = Arrays.asList(7, 7, 8, 8, 8, 11, 11, 9); List<Integer> newList = new ArrayList<>(list.size()); for (int i = 0; i < list.size(); i++) { if (!newList.contains(list.get(i))) { newList.add(list.get(i)); } } System.out.println(newList); // 输出: [7, 8, 11, 9] } ``` 这种方法的时间复杂度较高,适用于小型数据集[^1]。 --- #### 方法二:利用 HashSet 的特性自动 `HashSet` 不允许有复元素,因此可以通过将 `List` 转换为 `HashSet` 来实现效果。需要注意的是,转换完成后可以再转回 `ArrayList` 或其他类型的 `List`。 ```java import java.util.*; public class RemoveDuplicatesUsingHashSet { public static void main(String[] args) { List<Integer> list = Arrays.asList(7, 7, 8, 8, 8, 11, 11, 9); Set<Integer> set = new HashSet<>(list); List<Integer> uniqueList = new ArrayList<>(set); System.out.println(uniqueList); // 输出: [7, 8, 9, 11] } } ``` 该方法效率高,适合大多数场景,但会改变原始顺序[^3]。 --- #### 方法三:基于 LinkedHashSet 维护插入顺序 如果希望保留原有顺序的同时完成操作,可以选择使用 `LinkedHashSet` 替代普通的 `HashSet`。 ```java import java.util.*; public class RemoveDuplicatesPreserveOrder { public static void main(String[] args) { List<Integer> list = Arrays.asList(7, 7, 8, 8, 8, 11, 11, 9); Set<Integer> linkedSet = new LinkedHashSet<>(list); List<Integer> uniqueList = new ArrayList<>(linkedSet); System.out.println(uniqueList); // 输出: [7, 8, 11, 9] } } ``` 这种方式既实现了又保持了原有的排列次序[^3]。 --- #### 方法四:借助 Stream API 实现简洁优雅的解决方案 自 Java 8 推出以来,Stream API 成为了处理集合类数据的强大工具之一。下面展示如何运用它来进行高效便捷的工作: ```java import java.util.*; import java.util.stream.Collectors; public class RemoveDuplicatesUsingStream { public static void main(String[] args) { List<Integer> list = Arrays.asList(7, 7, 8, 8, 8, 11, 11, 9); List<Integer> uniqueList = list.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueList); // 输出: [7, 8, 11, 9] } } ``` 这段代码不仅语义清晰明了而且性能表现良好,特别推荐给熟悉函数式编程风格的朋友尝试采用[^2]。 --- #### 方法五:覆盖 equals 和 hashCode 方法配合特定容器结构 当面对更复杂的业务逻辑或者对象实例时(而非基本数值),我们通常还需要新定义这些实体类内部的行为准则——即覆写其默认行为下的 `equals()` 及 `hashCode()` 函数体内容之后才能正确判断两者的异同之处进而达到预期目的;最后再放入诸如 `HashSet` 等不允许成员间相互冲突的数据结构之中即可完成整个流程[^4]。 ```java class Item { private String id; private int quantity; @Override public boolean equals(Object o){ ... } @Override public int hashCode(){ ... } } // 使用示例省略... ``` 以上便是关于 Java 列表如何掉其中冗余项的一些常见技巧介绍以及对应的实际编码案例分享给大家参考学习之用! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值