List와 Set의 차이점
List | Set |
데이터의 순서(index)가 있다 | 데이터의 순서(index)가 없다 |
중복되는 데이터를 저장할 수 있다. | 중복되는 데이터를 저장할 수 없다. |
Collention - Set
- add( 추가할 자료 )
반환값 => Set에 중복되는 데이터를 추가하면 false를 반환하고 데이터는 추가되지 않는다. - remove( 삭제할 자료 )
Set의 데이터 변경 메서드는 없기 때문에 해당 자료를 삭제한 후에 다시 추가해주는 방법으로 처리
반환값 => 삭제성공(true), 삭제 실패(false) - clear()
전체 삭제
Iterator
Set의 데이터는 순서(index)가 없기 때문에 List처럼 index로 데이터를 하나씩 불러올 수 없다.
그래서 데이터를 하나씩 차례로 얻기 위해서는 Iterator형 객체로 변환해야 한다.
Set형의 데이터들을 Iterator형으로 변환하는 메서드 ==> iterator()
Iterator 변수이름 = set변수이름.iterator();
while(변수이름.hasNext()){ // 포인터가 가리키는 곳 다음번째에 데이터가 있는지 검사 있으면 true
System.out.println(변수이름.next());
// 포인터를 다음 번째로 이동시킨 후 그 자리의 데이터를 읽어서 반환
}
Set형의 자료를 List형으로 변환하기
ArrayList<타입> testList = new ArrayList<타입>(testSet);
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
public class SetTest {
public static void main(String[] args) {
HashSet hs1 = new HashSet();
// Set의 데이터 추가도 add()메서드를 이용한다.
hs1.add("DD");
hs1.add("AA");
hs1.add(2);
hs1.add("CC");
hs1.add("BB");
hs1.add(1);
hs1.add(3);
System.out.println("Set의 개수 : "+hs1.size()); // Set의 개수 : 7
System.out.println("Set의 데이터 : "+hs1); // Set의 데이터 : [DD, AA, CC, BB, 1, 2, 3]
// Set에 중복되는 데이터를 추가하면 false를 반환하고 데이터는 추가되지 않는다.
boolean isAdd = hs1.add("FF");
System.out.println("중복되지 않았을 때 : "+isAdd); // 중복되지 않았을 때 : true
System.out.println("Set의 데이터 : "+hs1); // Set의 데이터 : [DD, AA, CC, BB, FF, 1, 2, 3]
isAdd = hs1.add("CC");
System.out.println("중복될 때 : "+isAdd); // 중복될 때 : false
System.out.println("Set의 데이터 : "+hs1); // Set의 데이터 : [DD, AA, CC, BB, FF, 1, 2, 3]
System.out.println();
// Set의 데이터를 변경하려면 변경하는 명령이 따로 없기 때문에
// 해당 자료를 삭제한 후에 추가해 주는 방법으로 처리한다.
// 예) "FF" 문자열을 "EE"문자열로 변경하기
hs1.remove("FF");
System.out.println("삭제 후 Set의 데이터 : "+hs1); // 삭제 후 Set의 데이터 : [DD, AA, CC, BB, 1, 2, 3]
hs1.add("EE");
System.out.println("Set의 데이터 : "+hs1); // Set의 데이터 : [DD, AA, CC, BB, EE, 1, 2, 3]
System.out.println();
// hs1.clear();
// System.out.println("Set의 데이터 : "+hs1); // Set의 데이터 : []
// Set데이터를 Iterator 형으로 변환하기
Iterator it = hs1.iterator();
// Iterator의 hasNext() 메서드
// ==> Iterator의 포인터가 가리키는 곳 다음 번째에 데이터가 있는지 검사
// (데이터가 있으면 true, 없으면 false)
while(it.hasNext()) {
// Iterator의 next()메서드
// ==> Iterator의 포인터를 다음 번째 위치로 이동시킨 후 그 자리의 데이터를 읽어서 반환한다.
System.out.print(it.next()+"\t"); // DD AA CC BB EE 1 2 3
}
System.out.println();
System.out.println("--------------------------");
// 우리반 학생들 번호를 이용하여 추첨하는 프로그램을 작성해보자.
// 번호는 1번부터 26번까지 있고, 추첨할 인원은 3명이다.
// 당첨 번호를 출력하시오.
// int ram = new Random().nextInt(25)+1;
// 최소값부터 최대값 사이의 정수형 난수 만들기
// (int)(Math.random() * (최대값-최소값+1) + 최소값)
// 53~76 사이의 난수
// int ran= (int) (Math.random()*(76-53+1)+53);
// System.out.println("난수값 : "+ran);
HashSet<Integer> testSet = new HashSet<Integer>();
while(testSet.size()< 3) {
testSet.add((int)(Math.random() * 26+1));
}
System.out.println("당첨 번호 : "+testSet); // 당첨 번호 : [1, 22, 9]
// Set형의 자료를 List형으로 변환하기
ArrayList<Integer> testList = new ArrayList<Integer>(testSet); // list 선언시 넣어주기
System.out.println("List 데이터 출력하기 ...");
for(int a : testList) {
System.out.print(a+", "); // 1, 22, 9
}
}
}
'JAVA > HIGH JAVA' 카테고리의 다른 글
[JAVA] Map (0) | 2024.04.24 |
---|---|
[JAVA] Equals HashCode (0) | 2024.04.24 |
4/23 Homework - 야구게임, 로또생성기 (0) | 2024.04.24 |
[JAVA] Stack, Queue, (홈페이지 뒤로가기 구현), 정렬(Sort) (1) | 2024.04.22 |
[JAVA] 인코딩 설정, Collection (1) | 2024.04.19 |