Java去除ArrayList集合中重复字符串的案例
ArrayList去除集合中的字符串重复值
分析:
A:创建集合对象
B:添加多个字符串元素
C:创建新集合
D:遍历旧集合,获取得到每一个元素
E:拿着个元素到新集合去找,看有没有
有:不进去
没有:添加到新集合
F:遍历新集合
public static void main(String[] args){
// 创建集合对象
ArrayList array = new ArrayList();
// 添加多个字符串元素(包含内容相同的)
array.add("hello");
array.add("world");
array.add("java");
array.add("world");
array.add("java");
array.add("world");
array.add("world");
array.add("world");
array.add("world");
array.add("java");
array.add("world");
// 创建新集合
ArrayList Array = new ArrayList();
// 遍历旧集合,获取得到每一个元素
Iterator it = array.iterator();
while (it.hasNext()) {
String s = (String) it.next();
// 拿这个元素到新集合去找,看有没有
if (!Array.contains(s)) { // contains表示 在newArray中是否包含s
Array.add(s);
}
}
// 遍历新集合
for (int x = 0; x < Array.size(); x++) {
String s = (String) Array.get(x);
System.out.println(s);
}
}
案例2(不能创建新的集合):
public static void main(String[] args){
//创建集合对象
ArrayList array = new ArrayList();
//添加多个字符串元素(包含内容相同的)
array.add("hello");
array.add("world");
array.add("java");
array.add("world");
array.add("java");
array.add("world");
array.add("world");
array.add("world");
array.add("world");
array.add("java");
array.add("world");
//由选择排序思想引入,我们就可以通过这种思想做这个题目
//拿0索引的依次和后面的比较,有就把重复的干掉
//同理,拿1索引
for(int x=0;x<array.size()-1;x++){
for(int y=x+1;y<array.size();y++){
if(array.get(x).equals(array.get(y))){
array.remove(y);
y--;
}
}
}
//遍历集合
Iterator it = array.iterator();
while(it.hasNext()){
String s = (String)it.next();
System.out.println(s);
}
}
-----------------------------------------------------------------------------------------
需求:去除集合中自定义对象的重复值(对象的成员变量都相同)
public static void main(String[] args){
//创建集合对象
ArrayList array = new ArrauList();
//创建学生对象
Strdent s1 = new Student("林青霞1",27);
Strdent s2 = new Student("林青霞2",27);
Strdent s3 = new Student("林青霞3",27);
Strdent s4 = new Student("林青霞4",27);
Strdent s5 = new Student("林青霞1",27);
Strdent s6 = new Student("林青霞1",28);
//添加元素
array.add(s1);
array.add(s2);
array.add(s3);
array.add(s4);
array.add(s5);
array.add(s6);
//创建新集合
ArrayList newArray = new ArrayList();
//遍历旧集合,获取得到每一个元素
Iterator it = array.iterator();
while(it.hasNext()){
Student s = (Student)it.next();
//拿这个元素到新集合去找,看有没有
if(!newArray.contains(s)){
newArray.add(s);
}
}
//遍历新集合
for(int x=0;x<newArray.size();x++){
Studetn s = (Studetn)newArray.get(x);
System.out.println(s.getName()+"---"+s.getAge());
}
}
-------------------------------------------------------------
//最后输出:林青霞1---27
林青霞2---27
林青霞3---27
林青霞4---27
林青霞1---27
林青霞1---28
//我们发现按照和字符串一样的操作,出问题了。
为什么呢?
我们必须考虑哪里会出问题
分析后,问题出现判断上也就是32行if(!newArray.contains(s)){
而这个判断功能是集合自己提供的,所以我们如果想很清楚的
知道它是如何判断的,就应该去看源码:
//源码
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
contains()的底层依赖的是equals()方法//在68行可以看到
而我们学生类中没有equals()方法,这个时候,默认使用的是它
父类Object的equals()方法 Object()的equals()默认比较的是
地址值,所以,他们进去了,因为new的东西,地址值都不同。
按照我们自己的需求,比较成员变量的值,重写equals()方法即可
在工具类自动生成即可
//工具类代码:
package javatest;
public class Student {
// 成员变量
private String name;
private int age;
// 构造方法
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
// get方法set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student: [name=" + name + ",age=" + age + "]";
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
Java去除ArrayList集合中重复字符串的案例的更多相关文章
- Java 去除 ArrayList 集合中的重复元素
// One practice package Collection; import java.util.ArrayList; import java.util.Iterator; // 去除 Arr ...
- 去除ArrayList集合中的重复自定义对象元素
要求去除ArrayList集合中重复的Student的对象(什么叫重复,所有属性值都相同叫做重复). 思路: 1.创建一个新集合 2.遍历旧集合中的每一个元素,去新集合中找这个元素,如果这个元素不存在 ...
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素
1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...
- java集合 collection-list-ArrayList 去除ArrayList集合中的重复元素。
import java.util.*; /* 去除ArrayList集合中的重复元素. */ class ArrayListTest { public static void sop(Object o ...
- Java基础知识强化之集合框架笔记28:ArrayList集合练习之去除ArrayList集合中的重复字符串元素(升级)
1. 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) 要求:不能创建新的集合,就在以前的集合上做. 2. 代码示例之 去除集合中重复元素,不创建新的集合: package ...
- 集合框架-ArrayList练习(去除ArrayList集合中的重复元素)
1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...
- 如何去除List集合中重复的元素
1.通过循环进行删除 public static void removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ...
- 去除list集合中重复项的几种方法
因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List<string> li1 = new List<string> { "8&quo ...
- Android 去除list集合中重复项的几种方法
因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List<"}; List<string> li2 = new List<string& ...
随机推荐
- 维护你的请求队列,处理token异常
前言 网络请求是开发中最基础也是最核心的需求,封装一个稳定且可用性高的请求也显得尤为重要.通常封装的内容除了入参之外,更多的是请求中的异常处理.本文分享下我在处理 token 异常方面的做法,通过维护 ...
- [noip模拟赛]某种数列问题<dp>
某种数列问题 (jx.cpp/c/pas) 1000MS 256MB 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以 ...
- JAVA研发面试题
转自:http://www.jianshu.com/p/1f1d3193d9e3 Java基础的知识点推荐<Java编程思想>,JVM的推荐<深入理解Java虚拟机>,Spri ...
- B 蒜头君的树
时间限制 : - MS 空间限制 : - KB 评测说明 : 2s,256m 问题描述 蒜头君有一棵有根树,树的每一边都有边权,蒜头君想知道任意两点间最短距离之和为多少. 另外,由于各种原因,蒜 ...
- js检查数据类型
在实际工作中我们经常遇到要检测传入的参数类型是什么.也许第一时间想的的是typeof ,但这个也只是能检测个别的一些类型.如果要检测null,Array这些类型呢? 所以我们可以封装一个方法可以更加方 ...
- Java 中的递归
递归 递归 一种通过调用某个方法来描述需要重复进行的操作.该方法的特点就是可以自己调用自己. 案例一 排队的问题 在生活中,我们经常需要排队.在排队中,我们怎么才能知道自己所排在第几位呢? 我们也许会 ...
- 新建基于STM32F103ZET6的工程-HAL库版本
1.STM32F103ZET6简介 STM32F103ZET6的FLASH容量为512K,64K的SRAM.按照STM32芯片的容量产品划分,STM32F103ZET6属于大容量的芯片. 2.下载HA ...
- 201771030106-葛佳诚 实验一 软件工程准备-<初读《构建之法——现代软件工程》有问>
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 作业要求链接 https://www.cnblogs.com/nwnu-da ...
- 在vue项目中使用md5加密 sirai
1.安装模块 npm install js-md5 -D 2.在项目中引入模块 import md5 from 'js-md5' 3.把你需要加密的信息进行前期处理 CalcuMD5 = functi ...
- C#通用类库整理--字符串处理类
在程序开发中通常需要将字符串转为自己想要的结果,以下三个类库主要实现: 1.GetStrArray(string str, char speater, bool toLower) 把字符串按照分隔符 ...