[Java] 컬렉션

·2022년 9월 14일
0

Java

목록 보기
8/14
post-thumbnail

컬렉션 프레임워크

💡 컬렉션 : 여러 데이터의 집합(인터페이스, 클래스가 포함되어 있음)
💡 컬렉션 프레임워크 : 컬렉션을 다루는데 있어 편리한 메서드들을 미리 정의해놓은 것

컬렉션 워크의 장점

  • 자료 구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 만든 것
  • 위에 나열된 동작들을 수행하는 편리한 메서드를 제공
  • 객체지향적이고 재사용성이 높은 코드를 작성할 수 있다.

컬렉션 프레임워크의 구조

  • 주요 인터페이스 : List, Set, Map

    Collection(List와 Set의 공통점이 추출되어 추상화 된 인터페이스)
    ➰List : 데이터 순서(O), 중복저장(O)
    ➰Set : 데이터 순서(X), 중복저장(X)
    ➰Map : 데이터 순서(X), 중복저장(△)

List:데이터 순서(O), 중복저장(O)

  • 배열과 같이 객체를 일렬로 늘어놓은 구조
  • 객체를 저장하면 자동으로 인덱스 부여
  • 인덱스로 객체를 검색, 추가, 삭제할 수 있는 여러 기능을 제공

ArrayList

  • 객체가 인덱스로 관리(0부터 시작)
  • 기본 저장공간 10, 그 이후로는 1.5배씩 자동으로 저장용량이 늘어난다.
  • 연속적인 데이터 존재(순서 유지)
ArrayList<타입 매개변수> 객체명 = new ArrayList<타입 매개변수>(초기 저장 용량);
// 초기 저장 용량은 공란으로 둬도 자동으로 저장공간을 10으로 처리해준다.
  • 특정 인덱스를 추가하거나 제거하면, 뒤에 인덱스부터 마지막까지 옮겨진다.
  • 빈번한 객체 삭제 및 삽입이 일어나는 곳에는 비추!

LinkedList

  • 데이터를 효율적으로 추가, 삭제, 변경하기 위해 사용
  • 불연속적으로 존재하며 데이터들은 서로 연결되어 있다.
  • 삭제나 추가시 'ArrayList'와 다르게 데이터를 이동, 복사할 필요가 없어 처리 속도가 상대적으로 빠르다.
ArrayList<타입 매개변수> 객체명 = new LinkedList<타입 매개변수>();

💡 데이터를 순차적으로 추가 및 삭제할 경우 👉 ArrayList
💡 데이터를 읽어들이는 경우 👉 ArrayList
💡 중간에 데이터를 추가하거나, 중간에 위치하는 데이터를 삭제하는 경우 👉 LinkedList

❗ 데이터의 잦은 변경이 예상된다면 👉 LinkedList
❗ 데이터의 개수가 변하지 않는다면 👉 ArrayList

Iterator

  • 반복자
  • 컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할
  • 컬렉션 인터페이스에 정의된 iterator()를 호출하면 Iterator타입의 인스턴스가 반환됨
  • 컬렉션 인터페이스를 상속받는 List와 Set인터페이스는 iterator()메서드 사용 가능
ArrayList<String> list = ...;
Iterator<String> iterator = list.iterator();

while(iterator.hasNext()) {     // 읽어올 다음 객체가 있다면 
	String str = iterator.next(); // next()를 통해 다음 객체를 읽어옵니다. 
	...
}

Set:데이터 순서(X), 중복저장(X)

HashSet:저장순서X, 순차정리X

  • 중복 확인 메서드
    1. hashCode()
    2. equals()

TreeSet:저장순서x, 순차정리O

  • 이진 탐색 트리 형태
  • 하나의 부모노드가 최대 두개의 자식 노드와만 연결된다.(최상위 노드를 루트라고 함)
  • 정렬과 검색에 특화된 자료구조
  • 이진 탐색 트리의 모든 왼쪽 자식 값은 부모보다 작고, 오른쪽 자식의 값은 부모보다 크다.
  • 자동적으로 오름차순으로 정렬해준다.

Map:데이터 순서(X), 중복저장(△)

  • 키(key)와 값(value)로 구성된 객체(entry)를 저장하는 구조
  • 키(key)는 중복 저장 X
  • 값(value)는 중복 저장 O
    -> 기존에 저장된 키와 동일한 키로 값을 저장하면 새로운 값으로 덮어씌워 진다.

HashMap

  • Entry객체(key객체와 value객체를 가진)로 저장
  • 함수를 통해 키와 값이 저장되는 위치를 지정하여, 사용자는 위치를 알 수 없다
  • 저장되는 순서와 위치는 관계가 없다.
  • 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보인다.
HashMap<String, Integer> hashmap = new HashMap<>();

💡 Map에서 iterator()를 사용하고 싶다면?
iterator()는 컬렉션 인터페이스에 존재하기 때문에 Map 인터페이스에서 사용이 불가하다.
👍 keyset()이나 entrySet()메서드를 이용해 Set형태로 형변환한 인스턴스를 생성하여 사용

  • 사용예시
Set<String> keySet = map.keySet();

 Set<Map.Entry<String, Integer>> entrySet = map.entrySet();

컬렉션 메서드 모음

컬렉션 인터페이스

List

Iterator

Set

Map

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

0개의 댓글