Loading...

JAVA / / 2022. 1. 20. 17:48

자바 29강. 컬렉션(HashSet)

HashSet과 ArrayList를 사용하는 것과 동일하다.

 

HashSet에 제네릭을 int로 지정하면 오류가 발생할 것이다.

 

HashSet에 컨트롤 + 클릭해보면 제네릭은 클래스 타입이기 때문에

기본 자료형은 오류가 나는것이다.

 

이때 Wrapper 클래스를 사용해주면 오류를 해결할 수 있다.

 

Wrapper 클래스 : 기본자료형의 클래스화

기본 타입 래퍼 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

int대신 Integer을 넣으면 오류가 나지 않는다.

 

이제 HastSet에 add( ) 메서드를 이용해 데이터를 넣어보자.

package ex22;

import java.util.HashSet;

class MyInteger {
    int num;
}

public class CollectionEx02 {
    public static void main(String[] args) {
        HashSet<Integer> datas = new HashSet<>();
        datas.add(10);
        datas.add(20);
        datas.add(20);  // 동일한 데이터 들어갈 수 없음

        System.out.println(datas.size());
    }
}

3번 add를 해주었는데 size가 2로 출력이 되었다.

HashSet은 중복되는 데이터는 넣을 수 없기 때문이다.

 

package ex22;

import java.util.HashSet;

class MyInteger {
    int num;
}

public class CollectionEx02 {
    public static void main(String[] args) {
        HashSet<Integer> datas = new HashSet<>();
        datas.add(10);
        datas.add(20);
        datas.add(20);  // 동일한 데이터 들어갈 수 없음

        datas.remove(10);

        System.out.println(datas.size());
        System.out.println(datas);
    }
}

 

datas가 가진 모든 것을 한 번에 확인하려면

System.out.println(datas); 만 적어주면 된다.

 

ArrayList와 마찬가지로 데이터를 삭제할 때 remove를 사용하는데,

remove의 인수에는 인덱스가 아닌, 이 들어가야 한다.

datas가 가진 모든 것이 아닌 데이터 하나씩 확인을 하려면

hasNext( )를 사용해야 하는데 오류가 날것이다.

 

hasNext( )는 부모 Set 클래스가 가지고 있는 메서드이기 때문이다,

그래서 ArrayList 사용했던 것처럼 

Set<Integer> datas = new HashSet<Integer>( );

라고 부모 타입으로 선언해준다.

 

hasNext( )는 다음칸에 데이터가 있니?

어 있어, 아니 없어 하고 찾는 것이기 때문에 boolean 타입이다.

 

while문과 hasNext( ) 메서드를 이용하여

datas의 데이터들을 하나씩 꺼내보자.

 

데이터가 있으면 true를 반환하여 while이 돌아가고,

데이터가 없으면 false를 반환하여 반복문이 멈출 것이다.

package ex22;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

class MyInteger {
    int num;
}

public class CollectionEx02 {
    public static void main(String[] args) {
        Set<Integer> datas = new HashSet<>();
        datas.add(10);
        datas.add(20);
        datas.add(20);
        datas.add(30);
        datas.add(40);

        datas.remove(10);

        // 배열(.length)이랑은 다르게 크기를 알기 위해선 size()를 사용함
        System.out.println(datas.size());
        // datas가 가지고있는 모든 것을 출력
        System.out.println(datas);

        // datas가 가지고 있는 것을 하나씩 보려면 while 사용
        Iterator<Integer> its = datas.iterator();
        while(its.hasNext()) {
            System.out.println(its.next());
        }

    }
}

이 코드는 뭘까?

 

지난 시간 ArrayList를 배우면서 컬렉션은

많은 단계를 추상화되어 만들어진 것을 확인했었다.

 

최상위 부모가 Iterator였는데

hasNext( ) 메서드를 가지고 있는 클래스가 Iterator이기 때문에

Iterator<Integer> its = datas.iterator( );

라고 선언한 변수가 하나 필요했기 때문이다.

 

결과가 예쁘게 나온 것을 확인할 수 있다!

 

 

정리

 

데이터를 넣을 때는 중복되는 데이터는 제거하고 저장하고,

뽑을 때는 while을 사용한다는 것만 알아두자.

 

 

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

 

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com