컬렉션 프레임워크
사용 배경
-배열을 생성할 때 저장할 수 있는 객체 수가 정해지기 때문에 불특정 다수의 객체를 저장하기에 문제가 있다.
-배열의 또 다른 문제점은 객체를 삭제했을 때 해당 인덱스가 비게 될 수 있다.
-배열의 문제점을 해결하고 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들이 포함되어 있다.
자바 컬렉션이란?
-객체를 수집해서 저장하는 역할을 한다.
-주요 인터페이스로는 List, Set, Map이 있다.
List 인터페이스의 메서드
기능 | 메서드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 맨 끝에 추가 |
void add(int index, E element) | 주어진 인덱스에 객체를 추가 | |
set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 변경 | |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
isEmpty() | 컬렉션이 비어 있는지 조사 | |
int size() | 저장되어 있는 전체 객체 수를 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 | |
boolean remove(Object o) | 주어진 객체를 삭제 |
-List 컬렉션은 객체를 일렬로 늘어놓은 구조를 가지고 있다.
-객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인덱스가 부여되고 인덱스로 객체를 검색, 삭제 할 수 있는 기능을 제공한다.
-List는 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조한다.
-동일한 객체를 중복 저장할 수 있는데, 이 경우 동일한 번지가 참조된다.
-null도 저장이 가능한데, 이 경우 해당 인덱스는 객체를 참조하지 않는다.
List 사용법
1. 객체 추가 - add(int index, E element), add(E e)
// 맨 끝 추가
List<Board> list = new Vector<Board>();
list.add(new Board("제목1", "내용1", "글쓴이1");
// 인덱스 추가
list.add(1, new Board("제목5", "내용5", "글쓴이5"));
2. 객체 검색 - get(int index), contains(Object o)
// 인덱스로 객체 찾기
String str = list.get(3).toString()
3. 객체 삭제 - E remove(int index), remove(Object o)
// 인덱스로 객체 삭제
list.remove(2);
// 객체 이름으로 삭제
list.remove(Object o);
4. 객체 출력(for)
// for문
for(int i=0; i<list.size(); i++)
{
System.out.println(list.get(i).toString());
}
// each for문
for(Board index:list)
{
System.out.println(index.toString)());
}
ArrayList
-List 인터페이스의 구현 클래스
-ArrayList에 객체를 추가하면 객체가 인덱스로 관리 한다.
-배열과 다르게 자동적으로 저장 용량이 늘어난다.
-기본 생성자로 ArrayList 객체를 생성하면 내부에 10개의 객체를 저장할 수 있는 초기 용량을 가지게 된다. (처음부터 용량을 크게 잡을 수도 있다.)
-일반적으로 컬렉션에는 단일 종류의 객체들만 저장된다.
-ArrayList에 객체를 추가하면 인덱스 0부터 차례로 저장된다.
-ArrayList에서 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 앞으로 1씩 당겨진다. (추가해도 마찬가지)
-따라서 빈번한 객체 삭제와 추가가 일어나는 곳에는 ArrayList를 사용하는 것이 바람직하지 않다.
-인덱스 검색이나, 맨 마지막에 객체를 추가하는 경우에 사용하기 좋다.
ArrayList 사용법
1. 객체 추가 - add(int index, E element), add(E e)
맨 끝 추가
인덱스 추가
2. 객체 검색 - get(int index), contains(Object o)
특정 인덱스의 객체 얻기
특정 객체가 포함되어 있는지 확인
3. 객체 삭제 - E remove(int index), remove(Object o)
특정 인덱스의 객체 삭제
특정 객체 삭제
4. 객체 출력
size()
for
each for
Vector
-ArrayList와 다르게 Vector는 동기화된 메서드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메서드를 실행할 수 없다.
-하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있다.
-멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다.
Vector 사용법
1. 객체 추가 -add(E e)
2. 객체 검색
3. 객체 삭제
4. 객체 출력
참고