詳述ArrayList類contains方法

2021-10-25 02:47:27 字數 2057 閱讀 2674

contains方法原始碼如下:

public boolean contains(object o)

其呼叫的indexof方法如下:

public int indexof(object o) else

return -1;

}

string型別的集合:

arraylistnames = new arraylist();

names.add("jim");

system.out.println(names.contains("jim"));

contains方法本質上呼叫的indexof方法。在indexof方法中,此時的string型別中的o引數是個多型,o.equals實際呼叫string類中已經重寫後的equals方法。

包裝類集合

arraylistages = new arraylist();

ages.add(12);

system.out.println(ages.contains(12));

在integer類中,找到的重寫後的equals方法如下:

public boolean equals(object obj)

return false;

}

在包裝類integer的集合中,雖然呼叫的也是contains方法,但是在底層的源**中呼叫的equals方法與之前不同。這次呼叫的是在integer類中,重寫後的equals方法。輸入的引數經下轉型後,比較值的大小關係。

自定義型別集合

自定義乙個student類,如果要呼叫此類的contains方法,必須自己重寫乙個equals方法,源**如下:

package collection;

public class student

@override

public boolean equals(object obj) else }

}

主程式如下: 

arrayliststudents = new arraylist();

students.add(new student("111"));

system.out.println(students.contains(new student("111")));

詳細解釋自定義類集合的contains方法呼叫過程。如果不重寫equals方法,則呼叫的將會是object父類中的equals方法,則此時比較的將是新創的兩個student類的位址,而不是學號id。

public boolean equals(object obj)

所以equals方法在自定義中必須重寫,先將傳入的引數下轉型成student類,再定義兩個string的區域性變數,分別儲存傳入引數的id和呼叫引數的id,最後呼叫string類中重寫的equals方法比較兩個string是否相等。

由於是在student類中重寫的equals方法,所以如果傳入的是其他類引數,將其強制轉換就會出現異常。所以必須限制傳入的引數類必須為student類。因此呼叫instanceof關鍵字加以限制,如果沒有限制,則執行以下**,就會出現異常

arraylistlists = new arraylist();

lists.add(new string("111"));

system.out.println(lists.contains(new student("111")));

詳述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 names.add aa sys...

詳述抽象類

在介紹抽象類之前,我們想通過 來引入一下。背景 mammal是whale的父類。double price 9 mammal mammal new whale mammal.move 第一行 中實際上有乙個自動型別轉換的過程,因為9屬於整形,要把他變到更大的double型別就要自動型別轉換。第二三行 ...