Java

컬렉션 프레임워크

hs_developer 2022. 6. 10. 17:03

사용 배경

-배열을 생성할 때 저장할 수 있는 객체 수가 정해지기 때문에 불특정 다수의 객체를 저장하기에 문제가 있다.

 

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

 

-배열의 문제점을 해결하고 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 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. 객체 출력

 

 

 

 

참고

https://seokr.tistory.com/467