当前位置: 首页 > news >正文

[one_demo_13]ArrayList去除重复的元素

ArrayList底层采用数组结构,查询快,增删慢,线程不安全,效率高。在开发中会用到。存储量大的数据时,有时候需要将集合中重复的元素或者有重复内容的元素去除掉。总体来说,约有两种思路,一种是新建集合,遍历旧集合,将旧集合中的元素一个一个add到新集合,add时如果这个元素没有在新集合中则添加;第二种思路是,直接在旧集合中remove,采用选择排序法的思路,遍历集合(第一层循环),将集合的每一个元素与其后的所有元素比较(第二层循环),采用equals比较(注意如果是自定义的类需要重写equals方法),如果返回true,则remove这个被比较的元素,同时将二层循环的步数-1,以免遗漏比较的元素。

代码实现

Demo1新建集合过滤添加:

public static void test11() {
ArrayList oldList = new ArrayList();
ArrayList newList = new ArrayList();
Student s1 = new Student("haha1", 12);
Student s2 = new Student("haha2", 12);
Student s3 = new Student("haha3", 12);
Student s4 = new Student("haha4", 12);
Student s5 = new Student("haha1", 12);
Student s6 = new Student("haha1", 12);
Student s7 = new Student("haha2", 13);
Student s8 = new Student("haha4", 13);
Student s9 = new Student("haha1", 13);
Student s10 = new Student("haha2", 12);
Student s11 = new Student("haha3", 12);
Student s12 = new Student("haha4", 12);
oldList.add(s1);
oldList.add(s2);
oldList.add(s3);
oldList.add(s4);
oldList.add(s5);
oldList.add(s6);
oldList.add(s7);
oldList.add(s8);
oldList.add(s9);
oldList.add(s10);
oldList.add(s11);
oldList.add(s12);
int flag = 1;
for (Iterator it = oldList.iterator(); it.hasNext();) {
Student stu = (Student) it.next();
if (!newList.contains(stu)) {
newList.add(stu);
}
}
System.out.println(newList);

}

学生类略,注意重写equals方法。

Demo2在原集合中直接过滤:

public static void test12() {
ArrayList oldList = new ArrayList();
ArrayList newList = new ArrayList();
Student s1 = new Student("haha1", 12);
Student s2 = new Student("haha2", 12);
Student s3 = new Student("haha3", 12);
Student s4 = new Student("haha4", 12);
Student s5 = new Student("haha1", 12);
Student s6 = new Student("haha1", 12);
Student s7 = new Student("haha2", 13);
Student s8 = new Student("haha4", 13);
Student s9 = new Student("haha1", 13);
Student s10 = new Student("haha2", 12);
Student s11 = new Student("haha3", 12);
Student s12 = new Student("haha4", 12);
oldList.add(s1);
oldList.add(s2);
oldList.add(s3);
oldList.add(s4);
oldList.add(s5);
oldList.add(s6);
oldList.add(s7);
oldList.add(s8);
oldList.add(s9);
oldList.add(s10);
oldList.add(s11);
oldList.add(s12);
for (int i = 0; i < oldList.size() - 1; i++) {
for (int j = i + 1; j < oldList.size(); j++) {
Student ss1 = (Student) oldList.get(i);
Student ss2 = (Student) oldList.get(j);
if (ss1.equals(ss2)) {
oldList.remove(j);
j--;
}
}
}
System.out.println(oldList);
}

 

相关文章:

  • web项目发布到tomcat的两种方式
  • androidBasic
  • mybatis使用like模糊查询防sql注入写法
  • maven整合ssm项目中报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  • dubbo简介
  • FastDFS简介
  • redis集群
  • solr集群
  • ssm框架web项目配置全局异常处理
  • ActiveMQ
  • 删除数据库重复记录
  • session共享问题
  • springmvc中ajax响应json报406错误的两种原因
  • 数据库切片
  • tomcat热部署
  • Angular数据绑定机制
  • Hibernate最全面试题
  • Invalidate和postInvalidate的区别
  • javascript 哈希表
  • JavaScript学习总结——原型
  • js正则,这点儿就够用了
  • LeetCode29.两数相除 JavaScript
  • node学习系列之简单文件上传
  • Vue学习第二天
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 基于组件的设计工作流与界面抽象
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 事件委托的小应用
  • 项目实战-Api的解决方案
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #pragma once
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #在 README.md 中生成项目目录结构
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (C语言)字符分类函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读40-45)图像描述1
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • .net framework profiles /.net framework 配置
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • // an array of int
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [Android]Tool-Systrace
  • [Bada开发]初步入口函数介绍
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [C# 基础知识系列]专题十六:Linq介绍
  • [HTTP]HTTP协议的状态码
  • [iOS]iOS获取设备信息经常用法