public class ArrayListTest2 {
public static void main(String[] args) {
Set set = new HashSet();
// 저장된 객체의 중복을 허용하지 않음
set.add("정공자");
set.add(Integer.valueOf(425));
set.add(Float.valueOf(4.25F));
set.add(Integer.valueOf(425));
set.add("정공자");
System.out.println(set); // [정공자, 4.25, 425], 중복값 저장X
// Iterator 객체로 순회
Iterator iter = set.iterator();
while (iter.hasNext()) { // hasNext(): 집합에 값이 남아있는지를 확인
System.out.println(iter.next()); // next(): 값을 가지고 옴
}
}
}
new연산자로 생성한 객체는 HashSet에중복 저장 허용
public class ArrayListTest3 {
public static void main(String[] args) {
Set set = new HashSet();
Coffee coffee1 = new Coffee("마끼아또", 4500);
set.add(coffee1);
set.add("정공자");
set.add(new String("비정공씨"));
set.add(Integer.valueOf(425));
set.add(Float.valueOf(4.25F));
set.add(Integer.valueOf(425));
set.add("정공자");
set.add(new String("비정공씨")); // 중복, 저장 불가
Coffee coffee2 = new Coffee("마끼아또", 4500);
set.add(coffee2); // coffee2와 해시코드 값이 다름, 저장
System.out.println(set);
// [Coffee[마끼아또, 4500], 정공자, 비정공씨, 4.25, 425, Coffee[마끼아또, 4500]]
System.out.println("---------------------------------------------------------")
// Iterator 객체로 순회
Iterator iter = set.iterator();
while (iter.hasNext()) { // hasNext(): 집합에 값이 남아있는지를 확인
System.out.println(iter.next()); // next(): 값을 가지고 옴
}
}
}
[ 실행 결과 ]
[ HashSet에 저장되는 객체]
1. 문자열과 기본 타입의 wrapper 클래스의 객체 저장시, 중복 저장을 허용하지 않음 2. new연산자로 생성한 객체는 HashSet에 중복 저장 허용
LinkedHashSet 클래스
특징
중복을 허용하지 않음(set의 특징)
순서를 가짐
추가된 순서대로 접근할 수 있음
가장 최근에 접근한 순서대로 접근할 수 있음
Hashset - 순서를 가지지 않음
LinkedHashset - 순서를 가짐
사용하는 예
중복을 제거하면서도, 저장한 순서를 유지하고 싶을 때 사용
예제
public class Test2 {
public static void main(String[] args) {
Set linkedHashSet = new LinkedHashSet();
linkedHashSet.add(3);
linkedHashSet.add(1);
linkedHashSet.add(7);
linkedHashSet.add(3); // 중복된 수 저장X
linkedHashSet.add(5);
System.out.println(linkedHashSet.size()); // 4, 중복 저장 X
System.out.println(linkedHashSet.toString()); //[3, 1, 7, 5], 순서대로 저장
}
}
[ 실행 결과 ]
TreeSet 클래스
특징
이진 검색 트리의 자료 구조 형태로 데이터가 저장
중복을 허용하지 않고
순서를 가지지 않음
대신 객체를 정렬하여 저장하고 있음
저장된 객체의 정렬 기능을 제공함
자동으로 오름차순으로 저장
Hashset - 순서를 가지지 않음
LinkedHashset - 순서를 가짐
TreeSet - 객체를 정렬하여 저장(오름차순)
예제
public class Test1 {
public static void main(String[] args) {
Set treeSet = new TreeSet();
treeSet.add(5);
treeSet.add(3);
treeSet.add(8);
treeSet.add(1);
treeSet.add(10);
// iterator로 순회하여 출력
Iterator iter = treeSet.iterator();
while (iter.hasNext()) {
System.out.println(iter.next()); // [1,3,5,8,10], 오름차순 정렬하여 출력
}
// 향상된 for문으로 출력
for (Object tree : treeSet) {
System.out.print(tree); // [1,3,5,8,10], 오름차순 정렬하여 출력
}
}
}