4. 인터페이스 중복 순서 구조 클래스 동기화 속도 정렬
NULL
허용
Set X X value
HashSet X 빠름 X
TreeSet X 느림 O
EnumSet
LiknedHashSet
List O O
index,
value
ArrayList X 매우빠름 X O
LinkedList X 느림
Vector O 느림
Stack O 느림
Map X X
key,
value
HashMap X 매우빠름 X O
Hashtable O 느림 X X
TreeMap X 매우느림 O
EnumMap
LinkedHashMap 매우빠름
WeakHashMap
4
5. 자료구조 클래스 메소드
공통 size();
list
ArrayList
LinkedList
Vector
set(v);
get(i);
stack LinkedList
addLast(v);
getLast(); removeLast();
queue LinkedList
offer(v);
pool(); peek();
hash table
Hashtable
HashMap
put(k,v);
get(k);
set HashSet
add(v);
remove(v);
5
6. 6
설명 예제
선언 임의의 타입 E를 사용할 것을 선언.
class Generic<E, F>{
void <E> add(E e){} }
사용 임의의 타입을 String으로 사용
Generic<String, Integer> list = new Generic<String>();
list.add(new String(""));
선언
Number나 그 하위 클래스 타입 E
를 사용할 것을 선언
class Generic2<E extends Number & Comparable>{
void <E> add(E e){} }
사용
Number나 그 하위 클래스 타입이
아닌 경우는 사용 불가.
Generic2<Number> list = new Generic<Number>();
Generic2<Long> list = new Generic<Long>();
Generic2<String> list = new Generic<String>();
Generic Programming
매개변수의 데이터 타입을 지정
Generic 변수명 명명규칙
E=Element, K=Key, V=Value, O:Object, T=Type
타입의 범위 지정
<E extends Class, ... & extends Interface, ....>
특정 클래스나 인터페이스 하위의 타입만 사용
7. Generic Wildcard
제너릭 타입에 대한 범위 지정
7
예제 설명
Vector<Integer> x= new Vector<String> (); 다른 타입이므로 타입변환 불가
Vector<Object> obj = new Vector<String>(); 부모클래스가 아니므로 타입변환불가
Vector<?> wild= new Vector<String>(); <?>는 <String> 의 부모타입
Vector<? extends Number> wild= new Vector<Long>(); <Long>은 <Number>의 하위 타입
Vector<? extends Number> wild= new Vector<Object>(); <Object>은 <Number>의 상위 타입
Vector<? super Number> wild= new Vector<Object>(); <Object>은 <Number>의 상위 타입
Vector<? super Number> wild= new Vector<Long>(); <Long>은 <Number>의 하위 타입
Vector raw = new Vector<String>; 암묵적 허용(?)
표시방법 설명
? 모든 타입
? extends 클래스
? extends 인터페이스
특정 클래스(인터페이스) 하위의 모든 타입 (특정 클래스 포함)
? super 클래스
? super 인터페이스
특정 클래스(인터페이스) 상위의 모든 타입 (특정 클래스 포함)