原始碼:
contains:
public boolean contains(object o)
indexof:
public int indexof(object o) else
return -1;
}
string型別:
arraylistnames = new arraylist();
names.add("aa");
system.out.println(names.contains("aa"));
分析:system.out.println(names.contains(「aa」));中的names.contains(「aa」)是contains**中的o,然後轉到indexof原始碼執行:和已有的資料比較,判斷是否有相同的資料,有,則return i,使得contains中 return indexof(o) >= 0;值為吐ture,string型別輸出ture。
否則return 0 ,使得contains中 return indexof(o) >= 0;值為false,string型別輸出false。
包裝類:
arraylistages = new arraylist();
ages.add(12);
system.out.println(ages.contains(new integer(12)));
分析:
integer中equals原始碼:
public boolean equals(object obj)
return false;//如果不是integer,則直接false
}
對於包裝類,則是比較值是否相同。
自定義型別:
需先定義乙個類:
public class student
}
自定義型別
arrayliststudents = new arraylist();
students.add(new student("111"));
system.out.println(students.contains(new student("222")));
分析:
未重寫之前:
public class student
}
object中的epuals:
public boolean equals(object obj)
因為student中無epuals,則自定義型別呼叫object中的epuals。而object中的epuals是用來比較位址的,而自定義型別中建立了倆個student物件位址一定不同,則一定輸出false。
重寫之後:
分析:
public class student
@override
public boolean equals(object obj)
}
instanceof:
當自定義型別中的資料型別開放後:
arraylistlist = new arraylist();//資料型別為object
list.add(new string());//輸入的資料型別為string
system.out.println(list.contains(new student("111")));
此時:重寫的equals**中:student s = (student)obj; 則是乙個將string型別的字串下轉型給student。這是不可能的,會報錯,所以,此時我們在equals中判斷是否有相同資料前,要判斷是否是同一種資料型別,是否可以下轉型,即使用instanceof
@override
public boolean equals(object obj)
return false;
}
詳述ArrayList類contains方法
原始碼 contains方法 public boolean contains object o indexof方法 public intindexof object o else return 1 string型別 arraylist names newarraylist names.add tim...
詳述ArrayList類contains方法
contains方法原始碼如下 public boolean contains object o 其呼叫的indexof方法如下 public int indexof object o else return 1 string型別的集合 arraylistnames new arraylist na...
詳述ArryList類中是contains方法
詳述arrylist類中是contains方法 原始碼public boolean contains object o public int indexof object o else return 1 string 型別 arraylistlist new arraylist list.add j...