java学习基地

微信扫一扫 分享朋友圈

已有 1295 人浏览分享

List去除重复数据的五种方式

[复制链接]
1295 2

以下引见五种-差别的办法来除 Java 中ArrayList中的反复数据

1.利用LinkedHashSet删除arraylist中的反复数据

LinkedHashSet实邻一个ArrayList删除反复数据的最好办法。LinkedHashSet正在内部完成两件事:

  • 删除反复数据
  • 连结增加到此中的数据的挨次

Java示例利用LinkedHashSet删除arraylist中的反复项。正在给定的示例中,numbersList是包罗整数的arraylist,此中一些是反复的数字。

比方1,3战5.我们将列表增加到LinkedHashSet,然后将内容返回到列表中。成果arraylist出有反复的┞符数。

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

输出成果

  1. [1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
  2. [1, 2, 3, 4, 5, 6, 7, 8]
赶钙代码
2.利用java8新特征stream停止List来重

要从arraylist中删除反复项,我们也能够利用java 8 stream api。利用steam的distinct()办法返回一个由差别数据构成的流,经由过程工具的equals()办法停止比力。

搜集一切地区数据List利用Collectors.toList()。

Java法式,用于正在没有利用Set的状况下从java中的arraylist中删除反复项。

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

输出成果

  1. [1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
  2. [1, 2, 3, 4, 5, 6, 7, 8]
赶钙代码

3.操纵HashSet不克不及增加反复数据的特征 因为HashSet不克不及包管增加挨次,以是只能做为判定前提包管挨次:
  1. private static void removeDuplicate(List<String> list) {
  2.     HashSet<String> set = new HashSet<String>(list.size());
  3.     List<String> result = new ArrayList<String>(list.size());
  4.     for (String str : list) {
  5.         if (set.add(str)) {
  6.             result.add(str);
  7.         }
  8.     }
  9.     list.clear();
  10.     list.addAll(result);
  11. }
赶钙代码
4.操纵List的contains办法轮回遍历,从头排序,只增加一次数据,制止反复:
  1. private static void removeDuplicate(List<String> list) {
  2.     List<String> result = new ArrayList<String>(list.size());
  3.     for (String str : list) {
  4.         if (!result.contains(str)) {
  5.             result.add(str);
  6.         }
  7.     }
  8.     list.clear();
  9.     list.addAll(result);
  10. }
赶钙代码
5.两重for轮回来重
  1. for (int i = 0; i < list.size(); i++) {
  2. for (int j = 0; j < list.size(); j++) {
  3. if(i!=j&&list.get(i)==list.get(j)) {
  4. list.remove(list.get(j));
  5. }
  6. }
赶钙代码



举报 使用道具

回复

评论 2

青春舞曲  vip终身会员  发表于 2020-12-22 19:09:57 | 显示全部楼层
占位编辑

举报 使用道具

回复
万里城  vip终身会员  发表于 2020-12-22 20:38:48 | 显示全部楼层
锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

138

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Archiver|手机版|java学习基地 |网站地图

GMT+8, 2021-3-1 05:01 , Processed in 0.703125 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.