[30]List去除重複
阿新 • • 發佈:2018-12-09
網上有很多其他的做法,這裡僅介紹一種簡單明瞭的。
題目:班裡列印名單,需要把重複(同名同年齡)的去除。
思路:
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;
}
}