본문 바로가기
JAVA

[JAVA] 컬렉션 프레임워크 - Set

by happenstance 2021. 7. 26.

# List와 Set의 차이점

 

1. List

   - 데이터의 순서(index)가 있다.

   - 중복되는 데이터를 저장할 수 있다.

 

2. Set

   - 데이터의 순서(index)가 없다.

   - 중복되는 데이터를 저장할 수 없다.

   - Set에 데이터를 추가할 때는 add()메소드를 사용한다.

 

(실습)

Set에 데이터 저장하기

   - Set 데이터의 출력 결과를 보면 데이터를 저장한 순서와 다른 것을 확인할 수 있다.

 

   - Set에 중복되는 데이터를 저장하면 false를 반환하고 데이터는 추가되지 않는다.

 

Set 데이터 변경/수정하기

   - Set은 데이터를 수정하는 명령이 따로 없기 때문에 데이터를 수정하려면

     해당 자료를 삭제한 후 추가하는 방법을 사용한다. 

 

Set의 데이터 꺼내오기1

   - Set의 데이터는 순서(index)가 없기 때문에 List처럼 index로 데이터를 하나씩 불러올 수 없다.

     따라서 데이터를 하나씩 가져오기 위해서는 Iterator 객체로 변환해야 한다.

   - Set 데이터를 Iterator 객체로 변환하는 메소드 -> iterator()

   - Iterator에서 데이터를 하나씩 꺼내오기
     Iterator의 hasNext() 메소드
                -> Iterator의 데이터를 가리키는 포인터가 있는데, 이 포인터가 가리키는 곳
                    다음 번째에 데이터가 있으면 true, 없으면 false를 반환한다.

 

Set의 데이터 꺼내오기2 (향상된 for문 사용)

 

한 학급의 학생들 중 번호를 이용하여 3명을 추첨하는 프로그램을 작성해 보자.

     - 번호는 1 ~ 24번까지 존재한다.

       (Set의 중복되는 데이터는 저장되지 않는 성질을 이용한다.)

실행 결과는 실행할 때마다 바뀜

 

Set형 자료를 List형으로 변환하기

   - List 객체를 생성할 때 생성자의 인수값으로 Set 데이터를 넣어준다.

실행 결과

 

Set을 이용하여 숫자 야구 게임 프로그램을 작성하시오. 

   - 컴퓨터의 숫자는 난수를 이용하여 구한다.

   - 스트라이크는 S, 볼은 B로 나타낸다.

 

   풀이 1.

 

풀이2. (1의 풀이와 비슷하나 각각의 메소드를 생성했다는 차이점이 있음)

실행 결과

 

Set을 이용하여 로또 번호 생성 프로그램을 작성하시오.

   - 사용자는 로또를 구매할 때 구매할 금액을 입력하고
     입력한 금액에 맞게 로또번호를 출력한다.

   - 로또 한장의 금액은 1000원이며 최대 100장까지만 구입할 수 있고,
     거스름돈도 계산하여 출력한다.

 

   풀이 1.

중간 생략