컬렉션 : 요소(element) 객체들의 저장소, 객체들의 컨테이너라고 불림
컬렉션의 특징
제네릭 : 특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메서드를 일반화시키는 기법
Stack<E>
Stack<Integer>
Stack<String>
제네릭 타입 매개변수
Vector<E>
벡터는 배열을 가변 크기로 다룰 수 있게 하고, 객체의 삽입, 삭제, 이동이 쉽도록 구성한 컬렉션 클래스이다.
백터 생성
Vector<Integer> v = new Vector<Integer>();
Vector<E>
클래스의 주요 메서드
벡터의 요소 삽입
add()메소드를 이용하면 벡터의 끝이나 중간에 요소를 삽입할 수 있다. 컬렉션의 요소는 객체 타입만 가능하므로 정수를 Integer 객체로 자동박싱하여 삽입한다.
벡터에는 null도 삽입할 수 있다.
벡터의 활용
ArrayList<E>
ArryaList와 Vector클래스는 거의 동일하며 크게 다른 점은 ArryaList는 스레드 간에 동기화를 지원하지 않기 떄문에, 다수의 스레드가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 ArrayList의 데이터가 훼손될 우려가 있다. 하지만 멀티스레드 동기화를 위한 시간 소모가 없기 때문에, ArrayList는 Vector보다 속도가 빨라, 단일 스레드 응용에는 더 효과적이다.
ArrayList<String> a = new ArrayList<>();
컬렉션의 순차 탐색을 위한 Iterator 인터페이스
Vector<E>, ArrayList<E>, LinkedList<E>
가 상속받는 인터페이스
HashMap<K,V>
키와 값의 쌍으로 구성되는 요소를 다루는 컬렉션
LinekdList<E>
List 인터페이스를 구현한 컬렉션 클래스
LinkedList<String>
의 내부 구성
Collections 클래스 활용
제네릭 클래스와 인터페이스
구체화 : 제네릭 클래스에 구체적인 타입을 대입하여 구체적인 객체를 생성하는 과정
MyClass<String> s = new MyClass<Stirng>(); // 제네릭 타입 T를 String으로 구체화
s.set("hello");
System.out.println(s.get());
제네릭에서 배열의 제한
GStack<Integer>[] gs = new GStack<Integer>[10];
=> 안됨제네릭 메소드 예제
T가 타입 매개변수인 제네릭 메소드
제레릭의 장점