컬렉션 프레임 워크의 등장배경

 - 배열은 쉽게 생성하고 사용할 수 있지만, 저장할 수 있는 객체 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 객체를 저장하기에 문제가 있다.

 - 배열의 또 다른 문제점은 객체를 삭제했을 때 해당 인덱스가 비게 될 수 있다.

 - 배열의 문제점을 해결하고, 널리 알려져 있는 자료구조(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. 객체 출력


+ Recent posts