배열의 문제점
① 한 번 크기를 지정하면 변경할 수 없다.
- 공간 크기가 부족하면 에러가 발생 -> 할당 시 넉넉한 크기로 할당하면 메모리가 낭비됨
- 필요에 따라 공간을 늘리거나 줄일 수 없음
② 배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다
- 추가, 삭제할 데이터부터 마지막 기록된 데이터까지 하나씩 뒤로 밀어내고 추가해야 함 ( 복잡한 알고리즘 )
③ 한 타입의 데이터만 저장 가능하다
컬렉션의 장점
① 저장하는 크기의 제약이 없다
② 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다
- 자료를 구조적으로 처리 하는 자료구조가 내장되어 있어 알고리즘 구현이 필요 없음
③ 여러 타입의 데이터가 저장 가능하다
- 객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장해야 하는 경우 Wrapper 클래스 사용
- Wrapper 클래스 :
ⓐBoolean ⓑCharacter ⓒByte ⓓShort ⓔInteger ⓕLong ⓖFloat ⓗDouble
(Ex)
"10" -> Integer.parseInt("10") -> 10
"13.45" -> Double.parseDouble("13.45") -> 13.45
<배열과 컬렉션의 차이점>
- 배열은 크기를 지정해야 하고, 한 번 지정된 크기 변경이 불가능하지만 컬렉션은 크기에 제약이 없다.
.- 배열은 중간에 값을 추가, 삭제, 정렬 할 때 개발자가 직접 코드로 로직을 짜야한다. 하지만 컬렉션에서는 이미 자료구조적인 알고리즘이 내장되어 있어 메소드 호출만으로 데이터를 효율적, 구조적 관리 가능하다
.- 배열은 한가지 타입의 여러개 데이터를 보관할 수 있다면, 컬렉션은 별도의 제네릭설정을 하지 않을 경우 여러타입의 여러개의 데이터 보관 가능하다.
자료들을 순차적으로 나열한 자료구조로 인덱스로 관리되며, 중복해서 객체 저장 가능.
구현 클래스로 ArrayList와 Vector, LinkedList가 있음
List 계열 주요 메소드
< ArrayList >
- List의 후손을 초기 저장 용량은 10으로 자동 설정되며 따로 지정도 가능하다
- 저장 용량을 초과한 객체들이 들어오면 자동으로 늘어나며 고정도 가능
- 동기화(Synchronized)를 제공하지 않음
* 동기화 : 한번에 한가지 일만 수행
* 비동기화 : 동시에 일을 수행
< Vector >
- List의 후손
- ArrayList와 동등하지만 동기화를 제공한다는 점이 ArrayList와 차이점 -> List 객체들 중에서 가장 성능이 좋지 않음
< LinkedList >
- List의 후손으로, 인접 참조를 링크해 체인처럼 관리
- 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞/뒤 링크만 변경하면 되기 때문에 삭제와 삽입이 빈번하게 일어나는 곳에서 ArrayList보다 성능이 좋다