컬렉션(Collection)
- 컬렉션은 자바에서 제공하는 자료구조를 담당하는 프레임워크
- 추가,삭제,정렬 등의 기능처리가 간단하게 해결되어 자료구조적 알고리즘을 구현할 필요가 없음
- java.util 패키지에 포함되며, 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용 가능
- 컬렉션의 장점
1) 저장하는 크기의 제약이 없다.
2) 추가,삭제,정렬 등의 기능처리가 간단하게 해결된다.
3) 여러 타입의 데이터가 저장 가능하다.
** 객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장해야 하는 경우 Wrapper 클래스 사용 **
- 컬렉션의 주요 인터페이스
List
- 자료들을 순차적으로 나열한 자료구조로 인덱스로 관리되며, 중복해서 객체 저장 가능.
- 구현 클래스로 ArrayList와 Vector, LinkedList가 있음
** ArrayList **
- List의 후손으로 초기 저장 용량은 10으로 자동 설정되며 따로 지정도 가능
- 저장 용량을 초과한 객체들이 들어오면 자동으로 늘어나며 고정도 가능
- Vector : List의 후손, ArrayList와 동등하지만 동기화를 제공한다는 점이 ArrayList와 차이점. List객체들 중에서 가장 성능이 안좋음
** LinkedList **
- List의 후손으로, 인접 참조를 링크해 체인처럼 관리
- 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞/뒤 링크만 변경하면 되기 때문에 객체 삭제와 삽입이 빈번하게 일어나는 곳에서는 ArrayList 보다 성능이 좋음
- size() : List의 길이를 가져오는 메소드, 배열명.length; 와 같은 역할
- is.empty() : List가 비어있는지 확인하는 메소드
- List.set(int index, Student e) : List 의 i 번째 요소를 전달 받은 e로 변경
- List.remove(int index) : 리스트에서 index 번째 요소를 제거 , List는 중간에 비어있는 인덱스가 없게 하기 위해서 remove() 동작 시 뒤쪽 요소를 한 칸씩 당겨온다.
Set
- 순서를 유지하지 않음(== 인덱스 없음)
- 중복을 호용하지 않는다.(null 도 중복이 안됨, 1개만 저장가능)
- Set 이 중복을 확인하는 방법 : 객체가 가지고 있는 필드값이 모두 같으면 중복으로 판단. 이 때 필드 값이 모두 같은지 비교하기 위해서
객체에 "equals()" 가 반드시 오버라이딩 되어있어야 한다.
- add( ) : 데이터 추가
- size() : 저장된 데이터의 개수 반환
- remove( ) : Set에 저장된 객체 중 매개변수 e와 필드값이 같은 객체를 제거. Hash라는 단어가 포함된 Set이면 hashCode()도 같아야함
HashSet
- HashSet () : 중복 없이 데이터를 저장(Set)하고 데이터 검색이 빠름(Hash)
- Set 의 대표적인 자식 클래스
- 사용조건
1) 저장되는 객체에 equals() 오버라이딩 필수
2) 저장되는 객체에 hashCode() 오버라이딩 필수
** Hash 라는 단어가 붙은 컬렉션은 반드시 저장되는 객체에 equals(), hashCode() 를 오버라이딩 해야한다.
** LinkedHashSet **
- HashSet과 거의 동일하지만 Set에 추가되는 순서를 유지한다는 점이 다름
Iterator(반복자)
- 컬렉션에서 제공하는 컬렉션 객체 반복 접근자
- 컬렉션에 저장된 데이터를 임의로 하나씩 반복적으로 꺼내는 역할
---->> set.iteraror() : Set을 Iterator 가 하나식 꺼내갈수 있는 모양으로 변환
- hasNext(), next()
Wrapper 클래스
- 기본자료형 -> 객체로 포장하는 클래스
- 컬렉션에 기본자료형 값을 저장할 때 사용. 기본자료형에 없던 추가 기능, 값을 이용하고 싶을 때 사용
- Wrapper 클래스 종류
int -> Integer
double -> Double
Boolean, Byte, Short, Long, Float, Character
---->>> Integer 와 Double에 쳐진 선들은 삭제선으로 deprecated, 해당 구문은 삭제될 예정이다라는 뜻이다.
- parsing : 데이터의 형식을 변환
- AutoBoxing / AutoUnboxing
-- >> 자료형 int 100을 Integer가 자동 포장해줌으로서 AutoBoxing이 일어나고 있다.
--->> Integer + Integer > int + int (자동포장해제) == AutoUnboxing
Map
- 키(key) 와 값(value)으로 구성되어 있으며 키와 값은 모두 객체이다.
- 키는 중복저장을 허용하지 않고(Set방식), 값은 중복 저장 가능(List방식)
- 키가 중복되는 경우, 기존에 있는 키에 해당하는 값을 덮어 씌움
- .put()
- keySet() : Map 에서 key만 모아두면 Set의 특징을 가진다. 이를 활용할수 있도록 Map에서 keySet() 메소드를 제공해준다.(key만 모아서 Set으로 반환)
HashMap
- 키 객체는 hashCode() 와 equals() 를 재정의해 동등 객체가 될 조건을 정해야 한다.
- 키 타입은 hashCode와 equals()메소드가 재정의 되어있는 String타입을 주로 사용한다.