13-1 컬렉션 프레임워크

지미미·2023년 4월 20일
0

Java

목록 보기
12/16
post-thumbnail

컬렉션 프레임워크(Collention Framework)

널리 알려져 있는 자료구조(Data Structure)를 사용해서 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 인터페이스와 구현 클래스들을 java.util 패키지에서 제공한다.

List 컬렉션

List 컬렉션은 배열과 비슷하게 객체를 인덱스로 관리한다. 배열과의 차이점은 저장 용량(capacity)이 자동으로 증가하며, 객체를 저장할 때 자동으로 자동 인덱스가 부여된다는 것이다. 그리고 추가, 삭제, 검색을 위한 다양한 메소드가 제공된다. List 컬렉션은 동일한 객체를 중복 저장할 수 있고 null 저장이 가능하다.

  • List 인터페이스의 메소드
  1. 객체 추가
    • boolean add(E e) 주어진 객체를 맨 끝에 추가한다.
    • void add(int index, E element) 주어진 인덱스에 객체를 추가한다.
    • E set(int index, E element) 주어진 인덱스에 저장된 객체를 주어진 객체로 바꾼다.
  2. 객체 검색
    • boolean contains(Object o) 주어진 객체가 저장되어 있는지 조사한다.
    • E get(int index) 주어진 인덱스에 저장된 객체를 리턴한다.
    • boolean isEmpty() 컬렉션이 비어있는지 조사한다.
    • int size() 저장되어있는 전체 객체 수를 리턴한다.
  3. 객체 삭제
    • void clear() 저장된 모든 객체를 삭제한다.
    • E remove(int index) 주어진 인덱스에 저장된 객체를 삭제한다.
    • boolean remove(Object o) 주어진 객체를 삭제한다.
  • ArrayList
// String을 저장하는 ArrayList 생성
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<>();

// 오른쪽 <>타입 파라미터 생략해서 적으면 왼쪽에 지정된 타입을 따라감
  • Vector
    ArrayList와 다른 점은 동기화된(synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 Vector의 메소드들을 실행할 수 없고, 하나의 스레드가 메소드 실행을 완료해야만 다른 스레드가 메소드를 실행할 수 있다. 그래서 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있어서 스레드에 안전하다. (thread safe)
List<E> list = new Vector<E>();
List<E> list = new Vector<>();
  • LinkedList
    ArrayLists는 내부 배열에 객체를 저장해서 관리하지만, LinkedList는 인접 참조를 링크해서 체인처럼 관리한다.
    ※ ArrayLists는 중간 인덱스의 객체를 제거하면 뒤에 있는 객체의 인덱스가 1씩 앞으로 당겨지기 때문에 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayLists보다 LinkedList가 좋은 성능을 발휘한다.
ist<E> list = new LinkedList<E>();
List<E> list = new LinkedList<>();

Set 컬렉션

Set 컬렉션은 저장 순서가 유지되지 않는다. 또한 객체를 중복해서 저장할 수 없고, 하나의 null만 저장할 수 있다.

  • Set 인터페이스의 메소드
  1. 객체 추가
    • boolean add(E e) 주어진 객체를 저장한다. 객체가 성공적으로 저장되면 true를 리턴하고 중복 객체면 false를 리턴한다.
  2. 객체 검색
    • boolean contains(Object o) 주어진 객체가 저장되어 있는지 조사한다.
    • boolean isEmpty() 컬렉션이 비어있는지 조사한다.
    • Iterator<E> iterator() 저장된 객체를 한 번씩 가져오는 반복자를 리턴한다.
    • int size() 저장되어있는 전체 객체 수를 리턴한다.
  3. 객체 삭제
    • void clear() 저장된 모든 객체를 삭제한다.
    • boolean remove(Object o) 주어진 객체를 삭제한다.
  • Iterator 인터페이스의 메소드
    • boolean hasNext() 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다.
    • E next() 컬렉션에서 하나의 객체를 가져온다.
    • void remove() Set 컬렉션에서 객체를 제거한다.
  • HashSet
    HashSet은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다. HashSet은 객체를 저장하기 전에 먼저 객체의 hashCode() 메소드를 호출해서 해시코드를 얻어내고, 이미 저장되어 있는 객체들의 해시코드와 비교한다. 만약 동일한 해시코드가 있다면 다시 equals() 메소드로 두 객체를 비교해서 true가 나오면 동일한 객체로 판단하고 중복 저장을 하지 않는다.
Set<E> set = new hashSet<E>();

Map 컬렉션

Map 컬렉션은 키(key)와 값(value)로 구성돤 Map.Entry 객체를 저장하는 구조를 가지고 있다. Entry는 Map 인터페이스 내부에 선언된 중첩 인터페이스다. 키는 중복 저장될 수 없지만 값은 가능하다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값을 없어지고 새로운 값으로 대체된다.

  • Map 인터페이스의 메소드
  1. 객체 추가
    • V put(K key, V value) 주어진 키로 값을 저장한다. 새로운 키일 경우 null을 리턴하고 동일한 키가 있을 경우 값을 대체하고 이전 값을 리턴한다.
  2. 객체 검색
    • boolean containsKey(Object key) 주어진 키가 있는지 여부를 확인한다.
    • boolean containsValue(Object vlaue) 주어진 값이 있는지 여부를 확인한다.
    • Set<Map.Entry<K,V>> entrySet() 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴한다.
    • V get(Object key) 주어진 키가 있는 값을 리턴한다.
    • boolean isEmpty() 컬렉션이 비어있는지 여부를 확인한다.
    • Set<K> ketSet() 모든 키를 Set에 담아서 리턴한다.
    • int size() 저장된 키의 총 수를 리턴한다.
    • Collection<V> values 저장된 모든 값을 Collention에 담아서 리턴한다.
  3. 객체 삭제
    • void clear() 모든 Map.Entry(키와 값)을 삭제한다.
    • V remove(Object key) 주어진 키와 일치하는 May.Entry를 삭제하고 값을 리턴한다.
  • Iterator 인터페이스의 메소드

    • boolean hasNext() 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다.
    • E next() 컬렉션에서 하나의 객체를 가져온다.
    • void remove() Set 컬렉션에서 객체를 제거한다.
  • HashMap
    HashMap의 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정해야하낟. 객체가 달라도 동등 객체라면 같은 키로 간주하고 중복 저장되지 않도록 하기 위함이다. 동등 객체의 조건은 hashCode()의 리턴값이 같아야 하고 equals()메소드가 true를 리턴해야한다.

  • HashTable
    HashMap과의 차이점은 동기화된(synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 HashTable의 메소드들을 실행할 수 없고, 하나의 스레드가 메소드 실행을 완료해야만 다른 스레드가 메소드를 실행할 수 있다. 그래서 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있어서 스레드에 안전하다. (thread safe)

profile
블루라이트로 광합성 하는 새럼

0개의 댓글