컬렉션(collection)의 개념
- 요소(element) 객체들의 저장소
- 객체들의 컨테이너라고도 불림
- 요소의 개수에 따라 크기 자동 조절
- 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동
- 고정 크기의 배열을 다루는 어려움 해소
- 다양한 객체들의 삽입, 삭제, 검색 등의 관리 용이
컬렉션을 위한 자바 인터페이스와 클래스
인터 페이스 |
Collection<E> | Map<K, V> | |||
Set<E> | List<E> | Queue<E> | |||
클래스 | HashSet<E> | ArrayList<E> | Vector<E> | LinkedList<E> | HashMap<K,V> |
Stack<E> |
** LinkedList는 List<E>에도 속함
*** ArrayList<E> : 동기화 X, Vector<E> : 동기화 O
컬렉션과 제네릭
- 컬렉션은 제네릭(generics) 기법으로 구현됨
- 컬렉션의 요소는 객체만 가능
- 기본적으로 int, char, double 등의 기본 타입 사용 불가
- JDK 1.5부터 자동 박싱/ 언박싱으로 기본 타입 값 객체로 자동 변환
- 제네릭
- 특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화시키는 기법
- <E>, <K>, <V> : 타입 매개 변수 - 요소 타입을 일반화한 타입
- 제네릭 클래스 사례
- 제네릭 스택 : Stack<E>
- E에 특정 타입으로 구체화
- 정수만 다루는 스택 Stack<Integer>
- 문자열만 다루는 스택 Stack<String>
제네릭의 기본 개념
: 모든 종류의 데이터 타입을 다룰 수 있도록 일반화된 타입 매개 변수로 클래스나 메소드를 작성하는 기법
Vector<E>의 특성
- java.util.Vector
- <E>에서 E대신 요소로 사용할 특정 타입으로 구체화
- 여러 객체들의 삽입, 삭제, 검색하는 컨테이너 클래스
- 배열의 길이 제한 극복
- 원소의 개수가 넘쳐나면 자동으로 길이 조절
- Vector에 삽입 가능한 것
- 객체, null
- 기본 타입은 Wrapper 객체로 만들어 저장
- Vector에 객체 삽입
- 벡터의 맨 뒤에 객체 추가
- 벡터의 중간에 객체 삽입
- Vector에서 객체 삭제
- 임의의 위치에 있는 객체 삭제 가능 : 객체 삭제 후 자동 자리 이동
Vector<E> 클래스의 주요 메소드
- E elementAt(int index) : 인덱스 index의 요소 리턴
- E get(int index) : 인덱스 index 요소 리턴
- int capacity() : 벡터의 현재 용량 리턴
- int size() : 벡터가 포함하는 요소의 개수 리턴
- int clear() : 벡터의 모든 요소 삭제
- boolean remove(Object o) : 객체 o와 같은 첫 번째 요소를 벡터에서 삭제
컬렉션과 자동 박싱/ 언박싱
- JDK 1.5부터 자동 박싱/ 언박싱이 작동하여 기본 타입 값 사용 가능
Vector<Integer> v = new Vector<Integer>();
v.add(4); // 4 -> Integer.valueOf(4)로 자동 박싱
int k = v.get(0); //Integer 타입이 int 타입으로 자동 언박싱, k = 4
- 제네릭 타입 매개 변수를 기본 타입으로 구체화할 수는 없음
** 오류 : Vector <int> v = new Vector<int> ( );
컬렉션의 순차 검색을 위한 Iterator
- Iterator<E> 인터페이스
- Vector<E>, ArrayList<E>, LinkedList<E>가 상속 받는 인터페이스
- 리스트 구조의 컬랙션에서 요소의 순차 검색을 위한 메소드 포함
- Iterator<E> 인터페이스 메소드
메소드 | 설명 |
boolean hashNext() | 방문할 요소가 남아 있으면 true 리턴 |
E next() | 다음 요소 리턴 : has next next |
void remove() | 마지막으로 리턴된 요소 제거 |
- iterator() 메소드 : iterator객체 반환
- iterator객체를 이용하여 인덱스 없이 순차적 검색 가능
Vector<Integer> v = new Vector<Integer> ();
Iterator<Integer> it = v.iterator();
while(it.hasNext()){ //모든 요소 방문
int n = it.next(); //다음 요소 리턴
...
}
HashMap<K,V>
: 키(key)와 값(value)의 쌍으로 구성되는 요소를 다루는 컬렉션
- java.util.HashMap
- K는 키로 사용할 요소의 타입, V는 값으로 사용할 요소의 타입 지정
- 키와 값이 한 쌍으로 삽입
- 키는 해시맴에 삽입되는 위치 결정에 사용
- 값을 검색하기 위해서는 반드시 키 이용
- 삽입, 삭제, 검색이 빠른 특징
- 요소 삽입 : put() 메소드
- 요소 검색 : get() 메소드
예) HashMap<String, String> 생성, 요소 삽입, 요소 검색
HashMap<String, String> h = new HashMap<String, String> ();
h.put("apple", "사과"); // "apple" 키와 "사과" 값의 쌍을 해시맵에 삽입
String kor = h.get("apple"); // "apple"키로 값 검색, kor는 "사과"
** 값을 바꾸면, 그 값의 자리는 같고 새로운 값이 얹히는 것, 즉 키 값은 동일
*** key 값들은 중복되면 안 됨
명품 JAVA Programming - 개정판 4판/ 황기태
'개발 > TIL' 카테고리의 다른 글
[Visual Studio Code] vs code 터미널로 C, C++ 컴파일&실행하기 (0) | 2023.06.28 |
---|---|
[컴퓨터구조] 컴퓨터 구조의 큰 그림 (0) | 2023.06.25 |
[명품 자바 프로그래밍] 6장 - 모듈과 패키지 개념, 자바 기본 패키지 (0) | 2023.06.03 |
[Java] substring( ) 메소드 (0) | 2023.05.29 |
[Git] git 공부 Day2 - 로컬에서 깃허브로 (1) | 2023.05.26 |