需求:將用戶新輸入的字符串與集合中現有元素逐一比對,若不存在則添加。Java ArrayList 內置 contains() 方法已完美支持此場景。
contains(Object o) 內部遍歷數組,調用 o.equals(element) 比較。對於 String,equals() 比較的是字符序列內容,而非引用地址,完全滿足業務需求。
import java.util.ArrayList;
import java.util.Scanner;
public class StringCollectionDemo {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("I");
list.add("am");
list.add("LiLei");
Scanner sc = new Scanner(System.in);
System.out.print("請輸入字符串: ");
String input = sc.nextLine();
if (!list.contains(input)) {
list.add(input);
System.out.println("已添加: " + input);
} else {
System.out.println("已存在: " + input);
}
System.out.println("當前集合: " + list);
}
}
List 搭配 stream().anyMatch(s -> s.equalsIgnoreCase(input))。equals() 和 hashCode(),否則 contains() 仍按引用比較。ArrayList.contains() 為 O(n) 線性查找。若數據量大(>10^4)且頻繁查找,建議改用 HashSet(O(1) 平均)。善用集合框架 API,避免手寫循環比較,代碼更簡潔、可讀性更強。