ArrayList練習2一去除重複自定義物件
阿新 • • 發佈:2019-01-24
將自定義元素存到ArrayList集合,去除重複元素。
比如: 存入物件,同姓名,同年齡,同一人為重複元素。
思路:
1.對人描述將資料封入物件。
2.定義容器,將人存入。
list集合中判斷元素是否相同,用的是元素的equals方法,如 :remove contains方法
比如: 存入物件,同姓名,同年齡,同一人為重複元素。
思路:
1.對人描述將資料封入物件。
2.定義容器,將人存入。
3.取出。
import java.util.*;
class ArrayListText
{
public static void main(String []args)
{
ArrayList al=new ArrayList();
al.add(new person("lishi",5));
al.add(new person("lishi01",6));
al.add(new person("lishi02",7));
al=singleElements(al);
/*不能去除相同元素*/
Iterator it=al.iterator();
while(it.hasNext())
{
// sop(it.next().getName)
/*這樣編譯失敗,因為it.next返回值是Object,而且add(Object obj),需要進行強制型別轉換。*/
person p=(person)it.next();
sop(p.getName()+"......"+p.getAge());
}
}
public static ArrayList singleElements(ArrayList al)
{
ArrayList newAl=new ArrayList();
Iterator it=al.iterator();
while(it.hasNext())
{
Object obj=it.next();
if(!newAl.contains(obj))
{
newAl.add(obj);
}
}
return newAl;
}
}
class person
{
private String name;
private int age;
person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
不能去除相同元素,因為contains底層呼叫了indexOf(object
obj)方法,返回指定物件的索引。
而此方法底層呼叫了指定物件(obj)的
equals方法。
比較陣列中的元素 (ArrayList底層資料結構是陣列) 是否與此物件地址相同,相同為同一元素,返回元素索引。沒有相同元素返回-1。
然後contains用index返回的數值比較,大於等於0,是true,說明包含指定元素。小於0,是false,說明不包含指定元素。
而現在比較的是年齡和姓名,所以需要複寫指定物件也就是person的equals方法。
public boolean equals(Object obj)
{
person p=(person)obj;
return this.name.equals(p.getName()) && this.age==p.getAge();
}
list集合中判斷元素是否相同,用的是元素的equals方法,如 :remove contains方法