一、List和contains方法介紹
List是Java中的一個介面,用於存儲有序的元素集合。它有許多不同的實現方式,如ArrayList、LinkedList等。其中,ArrayList是最常用的一種實現方式,它是一個基於動態數組的實現。
contains方法是List介面提供的一個用於判斷元素是否存在的方法。它接收一個參數,表示需要判斷的元素,返回一個布爾值,表示列表是否包含這個元素。
二、使用List的contains方法判斷元素是否存在
在使用List的contains方法時,我們需要先創建一個List對象,並向其中添加一些元素。下面的代碼演示了如何使用List的contains方法判斷元素是否存在:
import java.util.ArrayList; import java.util.List; public class ListContainsDemo { public static void main(String[] args) { List list = new ArrayList(); list.add("apple"); list.add("banana"); list.add("cherry"); boolean containsBanana = list.contains("banana"); System.out.println("List contains \"banana\": " + containsBanana); boolean containsDurian = list.contains("durian"); System.out.println("List contains \"durian\": " + containsDurian); } }
上面的代碼首先創建了一個ArrayList,並向其中添加了三個水果。然後使用contains方法判斷了列表中是否包含了「banana」和「durian」兩個元素。程序輸出如下:
List contains "banana": true
List contains "durian": false
可以看到,contains方法返回了正確的結果。在實際開發中,我們經常需要使用contains方法來判斷某個元素是否存在於列表中。
三、List和equals方法的注意事項
在使用List的contains方法時,有一些需要注意的地方。首先是List和equals方法的關係。equals方法用於比較兩個對象是否相等,當我們向List中添加自定義對象時,需要確保自定義對象的equals方法被正確地重寫,否則List的contains方法可能無法正常工作。
例如,我們有一個Student類表示學生信息,其中包含學號和姓名兩個屬性:
public class Student { private String id; private String name; public Student(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
現在,我們需要使用List的contains方法判斷是否包含學號為「1001」的學生。我們先創建一個List對象,並向其中添加三個學生:
List students = new ArrayList(); students.add(new Student("1001", "張三")); students.add(new Student("1002", "李四")); students.add(new Student("1003", "王五"));
接著,我們使用如下代碼判斷學號為「1001」的學生是否在列表中:
Student student = new Student("1001", "張三"); boolean containsStudent = students.contains(student); System.out.println("List contains \"1001\": " + containsStudent);
運行上述代碼,發現結果為false,這是因為我們沒有重寫Student類的equals方法,List的contains方法默認使用的是Object類的equals方法,而這個方法比較的是兩個對象的內存地址。因此,為了使List的contains方法能夠正確判斷元素是否存在,我們需要在Student類中重寫equals方法,比較的是學生的學號這一個屬性:
public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } Student student = (Student) obj; return Objects.equals(id, student.id); }
現在,我們再次運行上述代碼,結果為true,說明我們已經成功地判斷了學號為「1001」的學生是否在列表中。
四、List和null值的注意事項
在使用List的contains方法時,還需要注意列表中是否包含null值。默認情況下,List是允許包含null值的,但是在調用contains方法時,需要注意這個問題。
例如,我們有一個包含null值的列表:
List list = new ArrayList(); list.add("apple"); list.add("banana"); list.add(null); list.add("cherry");
現在,我們需要使用List的contains方法判斷是否包含null值。我們可以先對null值進行特判:
if (list.contains(null)) { System.out.println("List contains null"); } else { System.out.println("List does not contain null"); }
但是,如果我們誤將null值當作列表中的一個元素,那麼我們其實是在判斷這兩個對象是否相等。我們可以通過如下代碼判斷null值是否在列表中:
boolean containsNull = list.stream().anyMatch(Objects::isNull); System.out.println("List contains null: " + containsNull);
另外,如果我們向列表中添加了若干個null值,調用contains方法時,只會返回第一個null的索引位置,而不是最後一個null的位置。要查找最後一個null,可以使用如下代碼:
int lastIndex = list.lastIndexOf(null); System.out.println("Last index of null: " + lastIndex);
五、List和containsAll方法的注意事項
除了contains方法,List還提供了containsAll方法,用於判斷一個列表是否包含另一個列表中所有的元素。
例如,我們有一個列表movies,存儲了多部電影的名字:
List movies = new ArrayList(); movies.add("The Godfather"); movies.add("The Shawshank Redemption"); movies.add("The Dark Knight"); movies.add("The Lord of the Rings");
現在,我們有一個列表watched,存儲了用戶看過的電影名字:
List watched = new ArrayList(); watched.add("The Godfather"); watched.add("The Shawshank Redemption");
我們要判斷用戶是否看過所有的電影,可以使用如下代碼:
boolean containsAll = movies.containsAll(watched); System.out.println("User has watched all movies: " + containsAll);
如果用戶看過所有的電影,程序輸出true,否則輸出false。注意,containsAll方法比較的是兩個列表中的對象是否相等,因此在使用時需要確保對象的equals方法已被正確地重寫。
六、總結
List的contains方法是一個非常常用的方法,可用於判斷一個元素是否存在於列表中。在使用contains方法時,需要注意List和equals方法、null值以及containsAll方法等問題。只有正確地使用這些API,才能在實際開發中取得更好的效果。
原創文章,作者:FWDB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/140757.html