자바의 정석 - 기초편 [HashSet(2) ~ 제네릭]
HashSet
객체를 저장하기 전에 기존에 같은 객체가 있는지 확인
같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.
TreeSet
이진 탐색 트리로 구현. 범위 탐색과 정렬에 유리
이진트리는 모든 노드가 최대 2개의 하의 노드를 갖는다.
각 요소(Node)가 나무 형태로 연결
이진 탐색 트리
부모보다 작은 값은 왼쪽 큰 값은 오른쪽에 저장
데이터가 많아질수록 추가, 삭제에 시간이 더 걸림
HashMap
Map인터페이스를 구현한 대표적인 컬렉션 클래스
순서를 유지하려면, LinkedHashMap클래스를 사용하면 된다.
해싱 기법으로 데이터를 저장, 데이터가 많아도 검색이 빠르다.
Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장
TreeMap
범위 검색과 정렬에 유리한 컬렉션 클래스
HashMap보다 데이터 추가, 삭제에 시간이 더 걸림
제네릭
컴파일 시 타입을 체크해 주는 기능
객체의 타입 안정성을 높이고 형 변환의 번거로움을 줄여줌
참조 변수와 생성자의 대입된 타입은 일치해야 한다.
ArrayList<Tv> list = new ArrayList<Tv>(); // ok
ArrayList<Product> list = new ArrayList<Tv>(); // error
제네릭 클래스 간의 다형성은 성립
List<Tv> list = new ArrayList<Tv>(); // ok
List<Tv> list = new LinkedList<Tv>(); // ok
매개변수의 다형성도 성립
extends로 대입할 수 있는 타입을 제한
제네릭 용어
Box <T> 제네릭 클래스 'T의 Box' 또는 'T Box'라고 읽는다.
T 타입 변수 또는 타입 매게 변수 (T는 타입 문자)
Box 원시 타입
제네릭 제약
타입 변수에 대입은 인스턴스 별로 다르게 가능
static 멤버에 타입 변수 사용 불가
배열 생성할 때 타입 변수 사용불가. 타입 변수로 배열 선언은 가능
와일드카드
하나의 참조 변수로 대입된 타입이 다른 객체를 참조 가능
<? extends T> : 와일드카드의 상한 제한 T와 그 자손들만 가능
<? super T> : 와일드 카드의 하한 제한 T와 그 조상들만 가능
<?> : 제한 없음. 모든 타입이 가능