List와 비슷하지만 차이점을 알아보자아아아!
- List와 Set의 차이점
1. List
- 데이터의 순서(index)가 있다.
- 중복되는 데이터를 저장할 수 있다.
2. Set
- 데이터의 순서(index)가 없다.
- 중복되는 데이터를 저장할 수 없다.
그럼 이제 정말 그런지 사용법을 알아보자아아아!
// Set을 생성해보자!
HashSet hs1 = new HashSet();
// 자료를 추가해보자!
hs1.add("AA");
hs1.add(2);
hs1.add("CC");
음~ 정말 똑같네!
그럼 차이점을 해보자
boolean을 추가하여 반환값 true/false를 받는 것도 비슷하다.
boolean isAdd = hs1.add("FF");
System.out.println("중복되지 않을 때 : " + isAdd);
System.out.println("set 데이터 : " + hs1);
<결과>
중복되지 않을 때 : true
set 데이터 : [DD, AA, CC, BB, FF, 1, 2, 3]
성공하면 true가 나온다.
그럼! 지금 궁금했던 중복을 넣어보자!
똑같이 boolean을 넣어서 결과를 확인해보자.
isAdd = hs1.add("CC");
System.out.println("중복될 때 : " + isAdd);
System.out.println("set 데이터 : " + hs1);
System.out.println();
<결과>
중복될 때 : false
set 데이터 : [DD, AA, CC, BB, FF, 1, 2, 3]
오오 안되는구나.
// 데이터 변경하기
그럼 List에서처럼 데이터를 변경할 수 있을까?
Set은 인덱스가 없기 때문에 변경을 할 수 없다. 그럼 어떡할까?
해당 데이터를 삭제(remove)하고 다시 추가(add)하면 된다.
그럼 List에서 처럼의 결과를 얻을 수 있다.
hs1.remove("FF");
// System.out.println("삭제후 set => " + hs1);
hs1.add("EE");
System.out.println("set 데이터 : " + hs1);
System.out.println();
(( 주석을 친 이유는.... 변경처럼 보이게 하려고 해봤다 ㅎㅎ))
<결과>
set 데이터 : [DD, AA, CC, BB, FF, 1, 2, 3] => set 데이터 : [DD, AA, CC, BB, EE, 1, 2, 3]
이렇게 변할 수 있다.
// 데이터 꺼내기
변경하기와 마찬가지로 인덱스가 없기에 꺼내기도 작업이 필요하다.
두가지 방법이 있는데,
1. Iterator 사용하기.
2. 향상된 for문 사용하기.
Iterator it = hs1.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println("----------------------------------");
System.out.println("향상된 for문 이용하기...");
for(Object obj : hs1) {
System.out.println(obj);
}
System.out.println("----------------------------------");
<결과>
DD
AA
CC
BB
EE
1
2
3
----------------------------------
향상된 for문 이용하기...
DD
AA
CC
BB
EE
1
2
3
----------------------------------
그런데... 결과도 똑같고... for문이 나오기 전에 Iterator를 썼다고 하니... for문이 더 편할듯 하다. 내생각!
Set은 중복되지 않는 특징이 있기 때문에 랜덤으로 겹치지 않는 난수 뽑을 때 유용하다고 한다!
**1~25 사이의 중복되지 않는 3개의 난수를 뽑아보자!
Random rnd = new Random();
HashSet<Integer> testSet = new HashSet<Integer>();
while(testSet.size()<3) {
testSet.add(rnd.nextInt(25) + 1);
}
System.out.println("당첨자 번호 : " + testSet);
<결과>
당첨자 번호 : [18, 5, 11]
while문 안에서 중복되지 않는 결과가 나올 때까지 돌고 3개가 완성되면 빠져나오는 것이다.
// Set이 인덱스가 없어서 불편할 때 List로 변환하여 사용할 수 있다.
ArrayList<Integer> testList = new ArrayList<Integer>(testSet);
System.out.println("List 데이터 출력...");
for(int i = 0; i < testList.size(); i++) {
System.out.println(testList.get(i));
}
'내가 보려고 정리하는 > JAVA' 카테고리의 다른 글
Thread(쓰레드)를 이용한 가위, 바위, 보 게임 (0) | 2022.12.27 |
---|---|
처음 보는 것들... + 조금씩 추가될 예정...! (0) | 2022.12.27 |
로또를 뽑아보자! (0) | 2022.12.20 |
그럼....<Map>은? (0) | 2022.12.16 |
<List> 생성, 값 추가, 끼워 넣기, 바꾸기, 삭제, 출력, 반환값, 차례로 삭제 까지 정리! (0) | 2022.12.16 |