컬렉션 프레임 워크의 등장배경
- 배열은 쉽게 생성하고 사용할 수 있지만, 저장할 수 있는 객체 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 객체를 저장하기에 문제가 있다.
- 배열의 또 다른 문제점은 객체를 삭제했을 때 해당 인덱스가 비게 될 수 있다.
- 배열의 문제점을 해결하고, 널리 알려져 있는 자료구조(Data Structure)를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록
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)
1) 맨 끝 추가
List<Board> list = new Vector<Board>();
list.add(new Board("제목1", "내용1", "글쓴이1"));
2) 인덱스 추가
list.add(1, new Board("제목5", "내용5", "글쓴이5"));
2. 객체 검색 - get(int index), contains(Object o)
- 인덱스로 객체 찾기
String str = list.get(3).toString();
- 특정 객체가 존재하는지 확인
list.contains(Object o);
3. 객체 삭제 - E remove(int index), remove(Object o)
1) 인덱스로 객체 삭제
list.remove(2);
2) 객체 이름으로 삭제
list.remove(Object o);
4. 객체 출력(for)
1) for문
System.out.println("for문");
for(int i = 0 ; i < list.size() ; i++){
System.out.println(list.get(i).toString());
}
2) each for문
System.out.println("each for문");
for(Board index : list){
System.out.println(index.toString());
}
ArrayList
- List 인터페이스의 구현 클래스
- ArrayList에 객체를 추가하면 객체가 인덱스로 관리
- 배열과 다르게 자동적으로 저장 용량이 늘어난다.
- 기본 생성자로 ArrayList 객체를 생성하면 내부에 10개의 객체를 저장할 수 있는 초기 용량을 가지게 된다. (처음부터 용량을 크게 잡을 수도 있음)
- 일반적으로 컬렉션에는 단일 종류의 객체들만 저장된다.
- ArrayList에 객체 추가하면 인덱스 0부터 차례대로 저장된다.
- ArrayList에서 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨진다.
- 특정 인덱스에 객체를 삽입하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 밀려난다.
- 따라서 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList를 사용하는 것이 바람직하지 않다.
- 인덱스 검색이나, 맨 마지막에 객체를 추가하는 경우에 사용하기에 좋다.
ArrayList 사용법
1. 객체 추가 - add(int index, E element), add(E e)
1) 맨 끝 추가
2) 인덱스 추가
2. 객체 검색 - get(int index), contains(Object o)
1) 특정 인덱스의 객체 얻기
2) 특정 객체가 포함되어있는지 확인
3. 객체 삭제 - E remove(int index), remove(Object o)
1) 특정 인덱스의 객체 삭제
2) 특정 객체 삭제
4. 객체 출력
1) size()
2) for
3) each for
Vector
- ArrayList와 다르게 Vector는 동기화된(synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행 할 수 없다.
- 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있다.
- 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다.
Vector 사용법
1. 객체 추가 - add(E e)
2. 객체 검색
3. 객체 삭제
4. 객체 출력
'학업' 카테고리의 다른 글
[시스템 분석 및 설계] 중간고사 정리 (0) | 2017.10.14 |
---|---|
[C++] GetAsyncKeyState() , GetKeyState() (0) | 2017.06.01 |
[네트워크 프로그래밍] - Generic (0) | 2017.05.07 |
[네트워크 프로그래밍] - Thread (0) | 2017.05.05 |
[네트워크 프로그래밍(JAVA)] I/O (0) | 2017.04.29 |