ArrayList中去去除字符串相同元素(内容相同的字符串)
分析:
1.创建集合对象
2.添加多个字符串的元素(包含内容相同)
3.创建新的集合
4.遍历旧集合,获取到每个元素
5.拿这个元素到新集合中去找,看有没有: 有?不搭理,没有?添加到新集合
6.遍历新集合
package Test1;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @作者:Xem626
* @date: 2022/7/20 10:36
* @TODO
*/
public class Test2 {
public static void main(String[] args) {
//创建一个集合
ArrayList arrayList =new ArrayList();
//添加多个元素
arrayList.add("hello");
arrayList.add("world");
arrayList.add("java");
arrayList.add("hello");
arrayList.add("world");
arrayList.add("java");
//创建新集合
ArrayList newArrayList= new ArrayList();
//遍历arrayList集合,从中获取每个元素
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
//获取到集合中的元素
String s = (String) iterator.next();
//拿到这个元素到新集合中去找,看有没
if (!newArrayList.contains(s)) {
//如果,没的,就添加
newArrayList.add(s);
}
}
//遍历新集合
for (int i=0;i<newArrayList.size();i++){
String s = (String) newArrayList.get(i);
System.out.println(s);
}
}
}
需求:不能创建新集合,在原有的集合基础上,进行元素去重
package Test1;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @作者:Xem626
* @date: 2022/7/20 10:39
* @TODO
*/
public class Test3 {
public static void main(String[] args) {
ArrayList arrayList =new ArrayList();
//添加多个元素
arrayList.add("hello");
arrayList.add("world");
arrayList.add("java");
arrayList.add("hello");
arrayList.add("hello");
arrayList.add("hello");
arrayList.add("world");
arrayList.add("world");
//排序思想,依次拿从索引为0的元素和后面的每个元素作比较,有就干掉
//从索引为1的元素和后面的元素依次做比较,有就干掉,同理类推
for (int x=0;x<arrayList.size()-1;x++){
for (int y=x+1;y<arrayList.size();y++){
if (arrayList.get(x).equals(arrayList.get(y))) {
arrayList.remove(y);
y--;//当发生了重复时,就把下标减少1
}
}
}
//遍历
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
String s = (String) iterator.next();
System.out.println(s);
}
}
}
需求:怎么去除集合中自定义的对象,去重
为什么:
我们的问题出现在判断上。而这个问题的功能是集合自己提供。所以我们要想高搞清除应该看源码。
contains()方法的底层依赖equals()方法
而我们的学生的类中没有equals(),会默认使用父类Object的equals()方法
Object的equals()方法默认比较的是地址值,所以他们进去了,因为new的东西,地址值是不同
所以我们去比较的时候,就返现返回是false。
按照我们的需求,比较成员变量,重写equals()
自动生成,equals()即可
package Test1;
import java.util.Objects;
/**
* @作者:Xem626
* @date: 2022/7/20 10:26
* @TODO
*/
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student() {
}
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;
}
// public boolean equals(Object object){
//
// //如果另一个对象和当前对象引用都一样,那么肯定是同一个对象的实例,则返回true
// if (this==object)
// return true;
// //如果另外一个对象是null
// if (object==null) {
// return false;
// }
//
// //如果另外一个对象和当前对象的类型都不一样,那么肯定不相等,返回false
// if (this.getClass()!=object.getClass()) {
// return false;
// }
//
// //到这步,传进来的对象肯定和当前对象类型一样,那么直接转换
// Student student = (Student) object;
// //检测两个对象的age属性,不一样返回false
// if (this.age!=student.age) {
// return false;
// }
//
// //检测name属性,由于name属性是字符串,不能直接用==比较,这里我不去直接
// //用name.equals(student.name),因为name为null,会发生空指针异常
// if (this.name ==null) {
// if (student.name!=null) {
// return false;
// }else if (!name.equals(student.name)) {
// return true;
// }
//
// }
//
// //如果前面都满足,说明两个对象相等
// return true;
//
// }
//
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
boolean result =age == student.age &&
Objects.equals(name, student.name);
System.out.println("比较结果:"+result);
return result;
}
// @Override
// public int hashCode() {
// return Objects.hash(name, age);
// }
}
package Test1;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @作者:Xem626
* @date: 2022/7/20 10:51
* @TODO
*/
public class Test4 {
public static void main(String[] args) {
//创建对象
Student s1 = new Student("小黑", 18);
Student s2 = new Student("小白", 17);
Student s3 = new Student("小红", 16);
Student s4 = new Student("小黄", 15);
Student s5 = new Student("小白", 17);
Student s6 = new Student("小红", 16);
Student s7 = new Student("小黄", 15);
// System.out.println("111:"+s2.equals(s5));
// System.out.println(s2);
// System.out.println(s3);
//
// String s8="abc";
// String s9="abc";
// System.out.println("222:"+s8.equals(s9));
//添加元素
ArrayList arrayList =new ArrayList();
arrayList.add(s1);
arrayList.add(s2);
arrayList.add(s3);
arrayList.add(s4);
arrayList.add(s5);
arrayList.add(s6);
arrayList.add(s7);
//创建新的集合
ArrayList newArraylist =new ArrayList();
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
Student student = (Student) iterator.next();
//拿到这个元素进行比较
if (!newArraylist.contains(student)) {
newArraylist.add(student);
}
}
//遍历新的集合
for (int x=0;x<newArraylist.size();x++){
Student student1 = (Student) newArraylist.get(x);
System.out.println(student1.getName()+"------"+student1.getAge());
}
}
}