데이터의 저장되는 순서 유지 및 중복이 불가능한 구조
-> 매우 효율적인 중복 제거 수단으로 사용 가능
인덱스 사용 X
구현체 클래스 : HashSet, TreeSet 등
HashSet
- 객체 생성 :
HashSet set = new HashSet();
- Set 인터페이스 구현체이므로 주로 업캐스팅을 활용하여 사용
- Set 계열 메서드 사용
boolean isEmpty()
: 컬렉션 객체가 비어있는지 여부를 리턴함
Set set = new HashSet();
set.isEmpty();
int size()
: 컬렉션 객체에 저장된 요소(데이터, 객체) 개수를 리턴함
배열명.length()
와 같은 개념 set.size();
boolean add(Object o)
: 컬렉션 객체에 요소(o, 데이터)를 추가함
파라미터가 Object 타입이므로 모든 타입 데이터를 추가할 수 있음
리턴타입이 boolean이므로 요소 추가 성공 여부 리턴 (중복 시 추가 X)
set.add(1); // int형 추가 (int -> Integer -> Object로 변환되어 저장)
set.add("TWO"); // String -> Object로 변환되어 저장
set.add(3.14); // double -> DOouble -> Object로 변환되어 저장
System.out.println("실수 3.14 추가 가능? " + set.add(3.14));
// 이미 위에서 3.14를 추가했기 때문에 false가 리턴됨
boolean contains(Object o)
: 컬렉션 객체 내의 요소 o의 포함 여부 리턴함
System.out.println("실수 3.14가 존재하는가? " + set.contains(3.14));
// true 리턴됨
System.out.println("정수 4가 존재하는가? " + set.contains(4));
// false 리턴됨
boolean remove(Object o)
: 컬렉션 객체 내의 요소 o 삭제 (결과 리턴됨)
set.remove(3.14);
System.out.println("실수 3.14 삭제 : " + set.remove));
// 위에서 이미 삭제했기 때문에 false 리턴됨
void clear()
: 컬렉션 요소 초기화
set.clear();
Object[] toArray()
: 컬렉션을 배열로 변환
Object[] oArr = set.toArray();
객체 생성 시 객체 데이터 복사 가능
-> Set set2 = new HashSet(set);
복사된 객체의 요소를 삭제하더라도 다른 객체의 요소에 영향을 미치지 않음
객체 생성 후 addAll()
메서드를 이용해 데이터를 한번에 추가하는 것도 가능함
TreeSet 객체를 활용하면 같은 타입 데이터가 저장된 Set 객체를 정렬할 수 있음
-> 같은 타입 데이터만 정렬 가능하며 다른 타입일 경우 예외 발생
-> 수치데이터는 숫자 크기 순으로 오름차순 정렬되며, 문자는 문자 코드값 기준으로 오름차순 정렬됨
TreeSet treeSet = new TreeSet(set);
Set<Integer> thisWeekLotto = new TreeSet<Integer>(Arrays.asList(7, 8, 11, 13, 5, 23));
// 로또 1등 당첨 번호 저장
Set<Integer> myLotto = new TreeSet<Integer>(); // 정렬을 위해서 TreeSet 사용
Random r = new Random(); // 1 ~ 45 사이의 난수가 필요하기 때문에 Random 클래스 사용
while(myLotto.size() < 6) { // 로또 번호 6개니까 6개만 저장
myLotto.add(r.nextInt(45) + 1); // 1 ~ 45까지 난수 중에서 myLotto에 저장
}
int count = 0; // 같은 숫자 몇 개인지 저장할 변수
for(int num : myLotto) {
if(thisWeekLotto.contains(num)) { // thisWeekLotto에 myLotto와 같은 번호가 있으면
count++; // count 증가
}
}
switch(count) {
case 6 : System.out.println("1등"); break;
case 5 : System.out.println("2등"); break;
case 4 : System.out.println("3등"); break;
default : System.out.println("꽝");
}
Arrays.asList()
new ArrayList()
대신 사용java.util.ArrayList
클래스와는 다른 클래스set()
,get()
,contains()
메서드를 가지고 있지만 원소 추가 메서드는 없음
-> 사이즈 변경 불가능