Javaのcontainsメソッドは、一部一致か完全一致か?

containsメソッドについて実験中です。

リストの場合と単体の場合で、containsメソッドの動作は違う

結論から言うと、リストのcontainsメソッドは完全一致かどうかを判定します。これに対して、Stringのcontainsメソッドは部分一致かどうかを判定します。

import java.util.*;
public class Main {
    public static void main(String[] args) throws Exception {
        
        // リストのcontainsメソッドは完全一致かどうかを判定する
        List<String> strList = new ArrayList<>();
        strList.add("名古屋君");
        strList.add("千葉君");
        if(strList.contains("千葉")){
            System.out.println("千葉はいます。");
        } else {
            System.out.println("千葉はいません。");
        }
        if(strList.contains("千葉君")){
            System.out.println("千葉君はいます。");
        } else {
            System.out.println("千葉君はいません。");
        }
        
        // Stringのcontainsメソッドは部分一致かどうかを判定する
        String s = "千葉君";
        if(s.contains("千葉")){
            System.out.println("千葉はいます。");
        } else {
            System.out.println("千葉はいません。");
        }
        if(s.contains("千葉君")){
            System.out.println("千葉君はいます。");
        } else {
            System.out.println("千葉君はいません。");
        }
    }
}

(実行結果)
千葉はいません。
千葉君はいます。
千葉はいます。
千葉君はいます。

上記コードを確認する場合は、このサイトが便利です。

独自クラスのリストで、containsを使う

import java.util.*;
import java.util.stream.Collectors;
class Person {
    String name;
    String address;
}
public class Main {
    public static void main(String[] args) throws Exception {
        List<Person> personList = new ArrayList<>();
        Person person_1 = new Person();
        person_1.name = "太田牛一";
        person_1.address = "東京";
        personList.add(person_1);
        Person person_2 = new Person();
        person_2.name = "千葉君";
        person_2.address = "千葉";
        personList.add(person_2);
        
        if(personList.contains("千葉")){
            System.out.println("千葉はいます。");
        } else {
            System.out.println("千葉はいません。");
        }
        if(personList.contains("千葉君")){
            System.out.println("千葉君はいます。");
        } else {
            System.out.println("千葉君はいません。");
        }
        
        // リストからメンバ変数が完全一致しているものを
        List<String> nameList = personList.stream().map(s -> s.name).collect(Collectors.toList());
        if(nameList.contains("千葉")){
            System.out.println("千葉はいます。");
        } else {
            System.out.println("千葉はいません。");
        }
        if(nameList.contains("千葉君")){
            System.out.println("千葉君はいます。");
        } else {
            System.out.println("千葉君はいません。");
        }
        //
    }
}

(実行結果)
千葉はいません。
千葉君はいません。
千葉はいません。
千葉君はいます。