网上有很多其他的做法,这里仅介绍一种简单明了的。
题目:班里打印名单,需要把重复(同名同年龄)的去除。
思路:
1.既然是去除元素,那么就是功能,功能就是要写在方法中
2.方法:公有,静态,返回值为List,参数为原容器
3.创建临时容器。判断临时容器是否有元素,如果有元素,清空。
4.迭代原容器中的元素。判断临时容器中是否有原容器中的元素,如果没有在临时容器中添入当前元素。
5.清空原容器,将临时容器添入原容器。返回
public boolean contains(Object obj)
return indexOf(obj);
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判断true还是false根据的是equals,再来看equals
public boolean equals(Object obj){
return (this==obj);
}
对象之间的==,也就是只有地址相等才能返回true
那么附上代码,学生类
package cn.domain;
class Stduent{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(){
this.age=age;
}
public int getAge(){
return age;
}
//重写equals方法,因为重复在这道题是要同名同年龄。但是编译器只会认为是要同一个对象。
@override
public boolean equals(Object obj){
if(obj==this)
return true;
if(!(obj instanceof Student))
throw new classCastException();
Student stu=(Student) obj;
return (this.name.equals(stu.getName()) && this.age==stu.getAge());
}
@override
public String toString(){
return "Student[name= "+name+",age= "+age+"]";
}
}
Demo类
package cn.arraylist;
import java.util.List;
import java.util.ArrayList;
public class Demo{
public static void main(String[] args){
List list=new ArrayList();
//添加5位学生,并且只要是偶数的,便添加两次
for(int i=0;i<5;i++){
list.add(new Student("list"+i,i+20));
if(i%2==0)
list.add(new Student("list"+i,i+20));
}
System.out.println(list);
list=removeRepeatElements(list);
System.out.println(list);
}
public static List removeRepeatElements(List list){
List temp=new ArrayList();
//判断是否为空
if(!temp.isEmpty)
temp.clear();
//遍历原容器
for(Iterator it=list.iterator();it.hasNext();){
Object obj=it.next();
//如果不包含,那么添加
if(!temp.contains(obj)){
temp.add(obj);
}
//清楚原容器
list.clear();
//将临时容器中的元素全部添入原容器
list.addAll(temp);
}
return list;
}
}