Java中ArrayList去除重复元素(包括字符串和自定义对象)
1.去除重复字符串
packagecom.online.msym;
importjava.util.ArrayList;
importjava.util.Iterator;
@SuppressWarnings({"rawtypes","unchecked"})
publicclassDemo1_ArrayList{
publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
list.add("c");
list.add("c");
ArrayListnewList=getSingle(list);
System.out.println(newList);
}
/*
*创建新集合将重复元素去掉
*1,明确返回值类型,返回ArrayList
*2,明确参数列表ArrayList
*
*分析:
*1,创建新集合
*2,根据传入的集合(老集合)获取迭代器
*3,遍历老集合
*4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
*/
publicstaticArrayListgetSingle(ArrayListlist){
ArrayListtempList=newArrayList();//1,创建新集合
Iteratorit=list.iterator();//2,根据传入的集合(老集合)获取迭代器
while(it.hasNext()){//3,遍历老集合
Objectobj=it.next();//记录住每一个元素
if(!tempList.contains(obj)){//如果新集合中不包含老集合中的元素
tempList.add(obj);//将该元素添加
}
}
returntempList;
}
}
2.去除ArrayList中重复自定义对象元素
注意事项:必须重写equals()方法的,因为contains方法和remove方法底层都依赖于equals方法
packagecom.online.msym;
importjava.util.ArrayList;
importjava.util.Iterator;
importonline.msym.bean.Person;
@SuppressWarnings({"rawtypes","unchecked"})
publicclassDemo2_ArrayList{
/**
**需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同,即同姓名同年龄)
:注意事项:重写equals()方法的
contains方法判断是否包含,底层依赖的是equals方法
remove方法判断是否删除,底层依赖的是equals方法
*/
publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();//创建集合对象
list.add(newPerson("张三",23));
list.add(newPerson("张三",23));
list.add(newPerson("李四",24));
list.add(newPerson("李四",24));
list.add(newPerson("李四",24));
list.add(newPerson("李四",24));
//ArrayListnewList=getSingle(list);//调用方法去除重复
//System.out.println(newList);
list.remove(newPerson("张三",23));
System.out.println(list);
}
/*
*创建新集合将重复元素去掉
*1,明确返回值类型,返回ArrayList
*2,明确参数列表ArrayList
*
*分析:
*1,创建新集合
*2,根据传入的集合(老集合)获取迭代器
*3,遍历老集合
*4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
*/
publicstaticArrayListgetSingle(ArrayListlist){
ArrayListtempList=newArrayList<>();//1,创建新集合
Iteratorit=list.iterator();//2,根据传入的集合(老集合)获取迭代器
while(it.hasNext()){//3,遍历老集合
Objectobj=it.next();//记录住每一个元素
if(!tempList.contains(obj)){//如果新集合中不包含老集合中的元素
tempList.add(obj);//将该元素添加
}
}
returntempList;
}
}
Person实体类:
packageonline.msym.bean;
publicclassPerson{
privateStringname;
privateintage;
publicPerson(){
super();
}
publicPerson(Stringname,intage){
super();
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
@Override
publicStringtoString(){
return"Person[name="+name+",age="+age+"]";
}
//重写equals方法,用于判断连个Person对象是否相同
@Override
publicbooleanequals(Objectobj){
Personp=(Person)obj;
System.out.println("equals方法被调用了,证明contains方法底层调用的是equals");
returnthis.name.equals(p.name)&&this.age==p.age;
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!