본문 바로가기

Programming language/Java

Java - 15 [HashSet, 람다식, 타입출력]

HashSet

- HashMap에서 키만 저장하는 클래스로서 보통 중복제거를 위해 사용한다.

 

HashSet도 HashMap과 거의 동일하게 사용하지만 키에 대한 값이 없다.

 

중복제거를 하면 원소의 값을 읽거나 제거하거나 더하거나 탐색을 할때는

HashMap은 get()을 사용하면 되지만, HashSet은 그러한 것이 없다.

그럴때 iterator()를 사용한다.

 

HashSet<Integer> set = new HashSet<>();

        permutation("", numbers, set);
        int count = 0;
        // HashSet 사용하기
        // HashSet을 배열처럼 사용하기 위해서는 iterator()가 꼭 필요하다.
        // iterator().hasNext()는 다음 원소가 있는지 없는지 판별한다.
        while(set.iterator().hasNext()){
            // iterator().next()는 다음 원소를 불러온다.
            int a = set.iterator().next();
            set.remove(a);
            if(a==2) count++;
            if(a%2!=0 && isPrime(a)){
                count++;
            }
        }

위코드를 보면 iterator()에서 hasNext()라는 메소드를 사용해서 다음원소가 있는지 없는지를 반환하고(boolean)

next()코드를 사용하여 원소를 반환한다.

 

다른 메소드들인 wait()이나 notify()와 같은 메소드들은 매우 고수준의 메소드라고 한다.

- 당장 배울 단계는 아닌것같음.

 

 

람다식

- 람다식은 한줄코드 작성에 매우 거대한 기여를 하는 스킬이다.

 

(매개변수) -> { 매개변수를 사용하는 함수 }

 

매개변수는 자료형이 생략 가능하다.

매개인자가 하나인 경우 매개변수의 소괄호 생략이 가능하다.

매개인자가 없는 경우 소괄호만 써도 무방하다.

함수의 실행문이 한줄이면 return문이 생략가능하다.

list.sort((o1, o2) -> o2.getAge() - o1.getAge());

 

이러한 형태로서 람다식은 작은 익명메소드로서의 역할을 수행한다.

 

 

타입출력 (.getClass().getName())

- 해당 변수의 값이 어떤 타입인 것인지 반환을 하고 싶을 때 알고 싶을 때 사용한다.

 

모든 Object에는 getClass().getName()이 존재한다. 이것은 이 객체가 어떤 타입이고

이 클래스의 이름이 무엇인지 반환해준다.