第一种:
实现思路:使用两个for循环遍历集合所有元素,然后进行判断是否有相同元素,如果有,则去除。这种方式是大部分最先想到的,也是最简单的实现方式。
其中,这种方式可以保证List集合原来的顺序不变。
/** * notes:使用两个for循环实现List去重 * @param list * @return */ public static List repeatListWayOne(List<String> list){ for(int i = 0;i < list.size();i++){ for(int j = i+1;j < list.size();j++){ if(list.get(i).equals(list.get(j))){ list.remove(j); } } } return list; }
第二种:(推荐)
实现思路:我们知道HashSet实现了Set接口,不允许出现重复元素。可以基于这个想法,把List集合所有元素存入HashSet对象,接着把List集合元素全部清空,
最后把HashSet对象元素全部添加至List集合中,这样就可以保证不出现重复元素。而HashSet有一个构造函数,在初始化时可以直接添加元素。
其中,HashSet不能保证顺序不变,所以此方式不能保证List集合原来的顺序不变。
/** * notes:使用HashSet实现List去重 * @param list * @return */ public static List repeatListWayTwo(List<String> list){ //初始化HashSet对象,并把list对象元素赋值给HashSet对象 HashSet set = new HashSet(list); //把List集合所有元素清空 list.clear(); //把HashSet对象添加至List集合 list.addAll(set); return list; }
一个List根据某个字段进行去重:
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.TreeSet; List<User> userList = userService.getList(); //获取原数据集合 //定义一个去重后的集合 List<User> list = new ArrayList<User>(); //去重 Set<User> set = new TreeSet<User>(new Comparator<User>(){ @Override public int compare(User a, User b) { return a.getUserId().compareTo(b.getUserId()); } }); set.addAll(userList); list = new ArrayList<User>(set);
第三种:
实现思路:TreeSet集合也是实现Set接口,是一个有序的,并且无重复元素集合。同理,我们可以根据上面方式二的思想进行去重。其中,去重后的List集合可以保证和原来的顺序一致。
/** * notes:使用TreeSet实现List去重 * @param list * @return */ public static List repeatListWayThird(List<String> list){ //初始化TreeSet对象,并把list对象元素赋值给TreeSet对象 TreeSet set = new TreeSet(list); //把List集合所有元素清空 list.clear(); //把TreeSet对象添加至List集合 list.addAll(set); return list; }
第四种:
实现思路:利用List集合contains方法循环遍历,先创建新的List集合,接着循环遍历原来的List集合,判断新集合是否包含有旧集合,如果有,则不添加至新集合,否则添加。
最后,把旧集合清空,把新集合元素赋值给旧集合。
/** * notes:利用List集合contains方法循环遍历去重 * @param list * @return */ public static List repeatListWayFourth(List<String> list){ //新建新List集合,用于存放去重后的元素 List<String> newList = new ArrayList<String>(); //循环遍历旧集合元素 for(int i = 0; i < list.size(); i++ ){ //判断新集合是否包含有,如果不包含有,则存入新集合中 boolean isContains = newList.contains(list.get(i)); if(!isContains){ newList.add(list.get(i)); } } //把List集合所有元素清空 list.clear(); //把新集合元素添加至List集合 list.addAll(newList); return list; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix