Java - 컬렉션 프레임워크#1

이새봄·2022년 9월 7일

Java

목록 보기
8/11

이 글은 이것이 자바다를 참고하여 작성되었습니다.

컬렉션 프레임워크

  • 컬렉션(Collection) : 객체를 수집해서 저장하는 것
  • 프레임워크 : 사용 방법을 미리 정해 놓은 라이브러리
  • 주요 인터페이스 : List, Set, Map (제네릭타입)

List 컬렉션

: 객체를 일렬로 늘어놓은 구조

  • 객체를 인덱스로 관리 → 객체를 저장하면 자동 인덱스 부여 → 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공
  • 객체의 번지를 참조
  • 중복 저장할 경우 동일한 번지가 참조된다.
  • null을 저장할 경우 인덱스는 객체를 참조하지 않는다.
  • add() 메소드 : 객체 추가
  • get() 메소드 : 객체 찾아옴
  • remove() 메소드 : 객체 삭제

ArrayList

: List 인터페이스의 구현 클래스

  • ArrayList에 객체를 추가하면 객체가 인덱스로 관리된다.
  • 배열 vs ArrayList
    • 배열 : 크기가 고정
    • ArrayList : 저장 용량(capacity)을 초과한 객체들이 들어오면 자동적으로 저장 용량이 늘어난다.

ArrayList 생성
List<String> list = new ArrayList<String>();

  • 저장할 객체 타입을 타입 파라미터로 표기하고 기본 생성자를 호출.
  • 기본 생성자로 ArrayList 객체를 생성하면 내부에 10개의 객체를 저장할 수 있는 초기 용량을 가지게 된다.
  • () 안에 숫자를 넣으면 용량이 크게 생성된다.
  • 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨진다. 특정 인덱스에 객체를 삽입하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 밀려난다.

Array.asList(T...a) 메소드
List<T> list = Arrays.asList(T...a);

  • 고정된 객체들로 구성된 List를 생성할 때 이용.
  • T 타입 파라미터에 맞게 asList()의 매개값을 순차적으로 입력하거나 T[] 배열을 매개값으로 주면된다.
  • 실행 결과 :
홍길동
신용권
김자바
1
2
3

Vector

List<E> list = new ArrayList<E>();

  • 내부 구조는 ArrayList와 같다.
  • 동기화된(synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있다. → 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다. → 스레드가 안전(Thread Safe)하다.

LinkedList

List<E> list = new LinkedList<E>();

  • ArrayList와 사용 방법은 같지만 내부 구조는 다르다.
  • ArrayList vs LinkedList
    • ArrayList : 내부 배열에 객체를 저장해서 인덱스로 관리
    • LinkedList : 인접 참조를 링크해서 체인처럼 관리
  • 특정 인덱스의 객체를 제거/삽입하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다. 따라서 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 LinkedList가 더 좋은 성능을 발휘한다.
  • 처음 생성될 때는 어떠한 링크도 만들어지지 않기 때문에 내부는 비어있다.

0개의 댓글