Java - Set에 특정 요소가 있는지 확인

Set에서 특정 값이 존재하는지 확인하는 방법을 소개합니다.

1. contains()로 특정 요소 확인

아래와 같이 Set.contains()는 인자로 전달된 객체가 Set 안에 있다면 true, 없다면 false를 리턴합니다.

import java.util.*;

public class Example {

    public static void main(String[] args) {

        Set<Integer> mySet = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));

        int item = 3;
        System.out.println(mySet.contains(item));

        item = 6;
        System.out.println(mySet.contains(item));
    }
}

Output:

true
false

1.1 Custom 클래스를 사용하는 Set에서 contains() 사용하기

위의 예제는 자바에서 제공하는 기본 클래스를 사용하였습니다.

만약 Custom 클래스의 객체를 갖고 있는 Set에서 contains()를 사용하려면, Custom 클래스에 equals()hashCode()를 구현해야합니다. contains()안에서 객체를 찾을 때 hashCode()equals()로 동일한 객체인지 비교하기 때문입니다.

아래 예제는 Student 클래스의 객체를 갖고 있는 Set에서 contains()로 객체 존재 여부를 확인하는 예제입니다.

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class Example2 {

    public static class Student {
        public String name;
        public int age;

        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public boolean equals(Object o) {
            Student other = (Student) o;
            return name.equals(other.name) && age == other.age;
        }

        @Override
        public int hashCode() {
            return Objects.hash(name, age);
        }
    }


    public static void main(String[] args) {

        Set<Student> mySet = new HashSet<>();
        mySet.add(new Student("John", 10));
        mySet.add(new Student("Doe", 20));

        Student item = new Student("John", 10);
        System.out.println(mySet.contains(item));

        item = new Student("Jason", 10);
        System.out.println(mySet.contains(item));
    }
}

Output:

true
false

2. Stream의 anyMatch()로 특정 요소 확인

아래와 같이 Set를 Stream으로 만들고 anyMatch()로 특정 요소가 있는지 체크할 수 있습니다.

import java.util.*;

public class Example1 {

    public static void main(String[] args) {

        Set<Integer> mySet = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));

        final int item = 3;
        boolean contains = mySet.stream().anyMatch(i -> i == item);
        System.out.println(mySet.contains(item));
    }
}

Output:

true
Loading script...
codechachaCopyright ©2019 codechacha