查看“List去重”的源代码
←
List去重
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Java]] == 关于 == 不同的方法去除 Java 中ArrayList中的重复数据。 思路: # 首先 List 本身的方法:“List.contains()”(判断是否包含元素); # 其次考虑使用“不包含重复元素”的集合 Set 的子类:“HashSet”(元素无序)、“LinkedHashSet”(元素有序); # 使用java8新特性:“stream”(流); # 最后还有一个并不新奇的本办法:双重循环,硬来。 === 使用:“'''LinkedHashSet'''” === LinkedHashSet是在一个ArrayList删除重复数据的'''最佳方法'''。LinkedHashSet在内部完成两件事: # 删除重复数据 # 保持添加到其中的数据的顺序 <syntaxhighlight lang="java" highlight="12,13"> 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); } } </syntaxhighlight> 输出结果: <syntaxhighlight lang="java"> [1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8] [1, 2, 3, 4, 5, 6, 7, 8] </syntaxhighlight> === 使用:“stream”(java8新特性)=== Java程序,用于在不使用Set的情况下从java中的arraylist中删除重复项。也可以使用java 8 stream api: # 使用steam的“distinct()”方法返回一个由不同数据组成的流, # 通过对象的“equals()”方法进行比较; # 收集所有区域数据List使用“Collectors.toList()”。 <syntaxhighlight lang="java" highlight="13"> 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(numbersList)); System.out.println(listWithoutDuplicates); } } </syntaxhighlight> 输出结果: <syntaxhighlight lang="java"> [1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8] [1, 2, 3, 4, 5, 6, 7, 8] </syntaxhighlight> === 使用:“HashSet” === 利用HashSet不能添加重复数据的特性:由于HashSet不能保证添加顺序,所以只能作为判断条件保证顺序: <syntaxhighlight lang="java"> 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); } </syntaxhighlight> === 使用:“List.contains”方法 === 用 List 的 contains 方法循环遍历,重新排序,只添加一次数据,避免重复: <syntaxhighlight lang="java"> 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); } </syntaxhighlight> === 使用:双重for循环 === <syntaxhighlight lang="java"> 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)); } } </syntaxhighlight>
返回至“
List去重
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息