JavaSE 计算2个List集合中的交集、差集、并集、去重并集
VideoOrder.java#
重写里面的equals和hashCode方法
class VideoOrder { private int price; private String title; public VideoOrder(String title, int price) { this.title = title; this.price = price; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; VideoOrder that = (VideoOrder) o; return price == that.price && Objects.equals(title, that.title); } @Override public int hashCode() { return Objects.hash(price, title); } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } @Override public String toString() { return "VideoOrder{" + "price=" + price + ", title='" + title + '\'' + '}'; } }
main方法
public static void main(String[] args) { List<VideoOrder> videoOrders1 = new ArrayList<>(); videoOrders1.add(new VideoOrder("a课程", 22)); videoOrders1.add(new VideoOrder("w课程", 200)); videoOrders1.add(new VideoOrder("c课程", 100)); videoOrders1.add(new VideoOrder("d课程", 33)); videoOrders1.add(new VideoOrder("f课程", 1)); List<VideoOrder> videoOrders2 = new ArrayList<>(); videoOrders2.add(new VideoOrder("a课程", 22)); videoOrders2.add(new VideoOrder("b课程", 18)); videoOrders2.add(new VideoOrder("d课程", 33)); videoOrders2.add(new VideoOrder("f课程", 1)); videoOrders2.add(new VideoOrder("z课程", 22)); // 交集,方式一 // videoOrders1.retainAll(videoOrders2); // System.out.println(videoOrders1); //方式二 List<VideoOrder> intersectionList = new ArrayList<>(); for (VideoOrder videoOrder : videoOrders1) { if (videoOrders2.contains(videoOrder)) { intersectionList.add(videoOrder); } } System.out.println("交集=" + intersectionList); // videoOrders1差集,方式一 // videoOrders1.removeAll(videoOrders2); // System.out.println(videoOrders1); //方式二 List<VideoOrder> diffList1 = new ArrayList<>(); for (VideoOrder videoOrder : videoOrders1) { if (!videoOrders2.contains(videoOrder)) { diffList1.add(videoOrder); } } System.out.println("订单1差集=" + diffList1); // videoOrders2差集 // videoOrders2.removeAll(videoOrders1); // System.out.println(videoOrders2); List<VideoOrder> diffList2 = new ArrayList<>(); for (VideoOrder videoOrder : videoOrders2) { if (!videoOrders1.contains(videoOrder)) { diffList2.add(videoOrder); } } System.out.println("订单2差集=" + diffList2); // 并集 videoOrders1.addAll(videoOrders2); System.out.println(videoOrders1); // 去重并集 // Set<VideoOrder> set = new HashSet<>(videoOrders1); // System.out.println(set); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-07-31 ASP.Net MVC 路由及路由调试工具RouteDebug
2019-07-31 ASP.Net MVC过滤器
2019-07-31 Oracle 去重后排序