Set

Mia Lee·2022년 2월 9일
0

JAVA

목록 보기
97/98
package ex_set;

import java.util.*;

public class Ex1 {

	public static void main(String[] args) {

		/*
		 * 컬렉션 프레임워크(Collection Framework)
		 * 1. Set 계열
		 * 
		 */
		
//		Set set = new Set(); // 사용 불가!
		// HashSet 객체 생성
//		HashSet set = new HashSet(); // 일반적인 HashSet 객체 생성 방법
		
		// HashSet -> Set 업캐스팅하여 사용하는 방법
		Set set = new HashSet(); // 업캐스팅
		// => 대부분의 메서드를 부모 인터페이스인 Set 인터페이스가 보유중이므로
		//    업캐스팅 상태에서도 대부분의 기능을 사용하는데 문제가 없음
		
		// Set 객체의 메서드
		// boolean isEmpty() : 컬렉션 객체가 비어있는지 판별
		System.out.println("Set 객체가 비어있는가? " + set.isEmpty());
		
		// int size() : 컬렉션 객체 내의 요소(데이터) 갯수 리턴
		System.out.println("Set 객체에 저장된 요소 갯수 : " + set.size());
		
		// String toString() : 컬렉션 객체 내의 모든 요소를 문자열로 리턴(오버라이딩)
		System.out.println("Set 객체의 모든 요소 : " + set.toString());
		System.out.println("Set 객체의 모든 요소 : " + set); // toString() 생략 가능
		
		// boolean add(Object e) : 요소 1개(e)를 컬렉션에 추가 후 추가 성공 여부 리턴
		// => 파라미터가 Object 타입이므로 모든 데이터타입 추가 가능
		//    만약, 제네릭 설정 시 Object -> 제네릭타입으로 변경!
		// => 리턴타입이 boolean 이므로 요소 추가 성공 여부 리턴됨(중복데이터 추가 시 false)
		System.out.println("Set 객체에 데이터가 추가 되었는가? " + set.add(1));
		set.add("TWO");
		set.add(3.14);
		
		System.out.println("Set 객체가 비어있는가? " + set.isEmpty());
		System.out.println("Set 객체에 저장된 요소 갯수 : " + set.size());
		System.out.println("Set 객체의 모든 요소 : " + set);
		// => 저장 순서가 유지되지 않으므로 출력되는 데이터의 순서는 다를 수 있다!
		
		System.out.println("실수 3.14 추가가 가능한가? " + set.add(3.14));
		System.out.println("문자 '4' 추가가 가능한가? " + set.add('4'));
		
		// boolean contains(Object o) : 특정 요소(o)가 컬렉션 객체에 포함되어 있는지 판별
		System.out.println("Set 객체에 실수 3.14가 포함되는가? " + set.contains(3.14));
		System.out.println("Set 객체에 정수 3이 포함되는가? " + set.contains(3));
		
		// boolean remove(Object o) : 특정 요소(o)를 컬렉션 객체에서 제거
		// => 삭제 성공 시 true, 실패 시 false 리턴
		System.out.println("Set 객체 내의 실수 3.14 삭제 : " + set.remove(3.14));
		System.out.println("Set 객체 내의 실수 3.14 삭제 : " + set.remove(3.14));
		System.out.println("Set 객체의 모든 요소 : " + set);
		
		// Object[] toArray() : 컬렉션 내의 모든 요소를 갖는 배열을 생성하여 리턴
		Object[] objArr = set.toArray();
		System.out.println(Arrays.toString(objArr));
		
		// boolean addAll(Collection c) : 컬렉션 내의 모든 요소를 다른 컬렉션에 하나꺼번에 추가
		
		// HashSet 객체 생성
		Set set2 = new HashSet();
		set2.add(9); set2.add(10); set2.add(1);
		System.out.println("Set2 객체의 모든 요소 : " + set2);
		System.out.println("Set2 객체에 set 객체 모두 추가 : " + set2.addAll(set));
		// => 중복된 요소가 존재하지만 중복되지 않는 요소 추가가 가능하므로 true 리턴됨
		System.out.println("Set2 객체의 모든 요소 : " + set2);
		System.out.println("Set2 객체에 set 객체 모두 추가 : " + set2.addAll(set));
		// => 추가할 모든 요소가 이미 존재하므로 추가 불가능하기 때문에 false 리턴됨
		
		// clear() : 컬렉션 내의 모든 요소를 초기화(제거)
		set2.clear();
		System.out.println("Set2 객체의 모든 요소 : " + set2);
		
		// HashSet 등 컬렉션 객체 생성 시 파라미터로 다른 컬렉션 객체를 전달하면
		// 해당 컬렉션 객체의 요소를 갖는 새로운 컬렉션 객체가 생성됨
		Set set3 = new HashSet(set);
		// => 데이터가 저장된 주소를 공유하는 것이 아닌 실제 요소를 복사하여 전달하므로
		//    저장된 요소는 갖지만 주소는 다르게 생성됨
		System.out.println("Set3 객체의 모든 요소 : " + set3);
		System.out.println("Set 객체의 모든 요소 : " + set);
		
		System.out.println("Set과 Set3 객체는 동일한 주소값을 가지고 있는가? " + (set == set3));
		// boolean equals(Collection c) : 컬렉션 요소가 동일한지 판별
		System.out.println("Set과 Set3 객체는 동일한 객체인가? " + set.equals(set3));
		
		System.out.println("==================================================");
		
		// TreeSet 객체를 활용하면 같은 타입 데이터가 저장된 Set 객체 정렬 가능
		// => 주의! 반드시 같은 타입 데이터만 저장해야한다!
		// => 수치데이터는 수치의 크기 순으로 오름차순 정렬되며(0 -> 9)
		//    문자 데이터는 문자 코드값의 크기 순으로 오름차순 정렬되므로
		//    수치데이터와 문자데이터의 정렬 결과는 다를 수 있다!
		
		Set set4 = new HashSet();
		
		set4.add(100); set4.add(99); set4.add(500);
		set4.add(2); set4.add(35); set4.add(999);
		
		System.out.println(set4); // [2, 99, 35, 100, 500, 999] => 비정렬
		
		Set set5 = new TreeSet(set4); // 기존 set4 요소를 그대로 set5 추가(자동 정렬됨)
		System.out.println(set5); // [2, 35, 99, 100, 500, 999] => 항상 결과 같음(정렬)
		
		System.out.println("==================================================");
		
		/*
		 * Set 계열의 모든 요소를 반복문을 통해 출력
		 * => 인덱스 사용이 불가능하므로 일반 for문을 통해 접근 불가능
		 * => 대신, 향상된 for문을 통해 저장된 요소를 차례대로 접근 가능
		 * 
		 * < 기본 문법 >
		 * for (요소를 꺼내서 저장할 변수 : 컬렉션객체) {}
		 * => 기본적인 요소의 타입은 Object 타입이므로 저장할 변수를 Object 타입으로 선언
		 * 
		 */
		
		for (Object o : set5) {
			// Object 타입 변수 o에 Set 객체의 요소가 하나씩 대입됨
			System.out.println(o);
		}
		
	}

}

















0개의 댓글