본문 바로가기
JAVA

컬렉션 프레임웍

by moonstal 2022. 3. 8.

- 컬렉션: 여러 객체를 모아 놓은 것을 의미

- 프레임웍: 표준화, 정형화된 체계적인 프로그래밍 방식

- 컬렉션 프레임웍

  컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식

  컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공

 

컬렉션 프레임웍의 핵심 인터페이스

- List: 순서가 있는 데이터 집합 데이터 중복허용 (대기자 명단)

- Set: 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않음(네발동물집합)

- Map: 키와 값의 쌍으로 이루어진 데이터의 집합. 순서 없음/ 키중복 안됨/ 값중복가능(아이디비밀번호)

 

- List: 벡터, 어레이리스트*, 링크드리스트*

  - ArrayList: 기존의 벡터를 개선한것 벡터는 동기화 됨 순서유지 중복허용

    데이터의 저장공간으로 배열(array) 사용

  - 링크드리스트

    배열장점: 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간이 짧다.

    배열단점: 크기를 변경할 수 없다. 크기를 변경해야 하는 경우 새로운 배열 생성 후 데이터 복사, 큰배열 메모리 낭비

                 비순차적인 데이터 추가삭제 시간 많이 걸림/순차적인건 빠름

    ->링크드 리스트는 배열의 단점을 보완

    배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결 (노드)

    데이터의 삭제: 단 한 번의 참조변경만으로 가능

    데이터의 추가: 한번의 노드객체생성과 두번의 참조변경으로 가능

    class Node{

       Node next;  다음 노드

       Object obj;  데이터

    }

    단점: 불연속적 데이터 접근성 나쁨

    -> 더블리 링크드리스트: 이중연결리스트 접근성 향상 양쪽으로

    class Node{

       Node next;  다음 노드

       Node previous; 이전 노드

       Object obj;  데이터

    }

인덱스가 n인 데이터의 주소= 배열의 주소+n*데이터 타입의 크기

 

- List: 해쉬셋, 트리셋

- Map: (링크드)해쉬맵, 트리맵

 

- 스택: lifo(last in first out)구조. 마지막에 저장된 것을 제일 먼저 꺼냄(밑 막힌 상자) 저장push 추출pop 배열효율

  활용: 수식계산, 수식괄호검사, undo/redo, 웹브라우저 뒤로/앞으로

-  큐: fifo(first in first out) 구조 제일 먼저 저장한 것을 제일 먼저 꺼냄(줄서기) 저장offer 추출poll 링크드리스트

      인터페이스 객체생성 안됨, 큐 구현한 클래스 사용(링크드리스트)

  활용: 최근사용문서, 인쇄작업 대기목록, 버퍼(줄서기)

 

- Iterator, ListIterator, Enumeration: 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스

  컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것

- Map에는 iterator()가 없다

 

- Arrays: 배열을 다루기 편리한 메서드 제공

  배열출력 toString()

  배열복사 copyOf(), copyOfRange()

  배열 채우기 fill(),setAll()

  배열 정렬과 검색 sort(),binarySearch()

  다차원배열 출력 deepToString()

 

객체정렬에 필요한 메서드(정렬기준) 제공 인터페이스

- Comparable:기본정렬기준 compareTo()

- Comparator: 기본정렬기준 외 다른기준 compare()

- 두객체 비교결과 반환 같으면0/ 오른쪽 크면 음수/작으면양수

 

- 해쉬셋: 순서 없음 중복안됨

  set인터페이스를 구현한 대표적인 컬렉션 클래스

  순서 유지하려면 링크드해쉬셋 클래스 사용

  객체를 저장하기전에 기존에 같은 객체가 있는지 확인, 없으면 저장 

- 트리셋: 범위검색과 정렬에 유리한 컬렉션 클래스

  해쉬셋보다 데이터 추가삭제 시간 더걸림

  이진탐색트리로 구현 범위탐색과 정렬에 유리

  이진 트리는 모든 노드가 최대 2개의 하위노드를 갖음

  class TreeNode{

   TreeNode left;

   Object element;

   TreeNode right;

}

  이진탐색트리: 부모보다 작은 값은 왼쪽 큰 값은 오른쪽에 저장

  단점: 데이터가 많아질수록 추가삭제에 시간이 더 걸림(비교 횟수 증가)

  트리순회: 이진 트리의 모든 노드를 한번씩 읽는것 전위 중위 후위 순회

  중위순회하면 오름차순

 

- 해쉬맵(동기화안됨), 해쉬테이블(동기화ㅇ):

  map인터페이스를 구현 데이터를 키와 값의 쌍으로 저장

  순서 없고 키중복안됨 값 중복가능

  순서를 유지하려면, 링크드해쉬맵 클래스 사용

  해싱기반으로 데이터 저장 데이터가 많아도 검색 빠름

  키,value: 엔트리

 

-  해싱: 환자정보 관리, 해시함수 이용 해시테이블에 데이터 저장&저장위치 읽어오기

    해시테이블은 배열과 링크드리스트가 조합된 형태

  해시테이블에 저장된 데이터 가져오는 과정

   - 키로 해시함수를 호출해서 해시코드 얻음(배열의 인덱스)

   - 해시코드에 대응하는 링크드리스트를 배열에서 찾는다

   - 링크드 리스트에서 키와 일치하는데이터 찾음

   

- 트리맵

  범위 검색과 정렬에 유리

  해쉬맵보다 데이터 추가, 삭제에 시간이 더걸림

  

- Collections: 컬렉션을 위한 메서드 제공

- 컬렉션의 동기화: synchronizedXXX()

- 싱글톤 컬랙션 singletonXX()객체 한개만

- 한 종류의 객체만 저장 checkedXXX()

 

https://youtu.be/u0pJGFyvrqc

'JAVA' 카테고리의 다른 글

쓰레드  (0) 2022.03.10
지네릭스, 열거형, 애너테이션  (0) 2022.03.09
날짜와 시간 & 형식화  (0) 2022.03.08
java.lang패키지와 유용한 클래스  (0) 2022.03.08
예외처리  (0) 2022.03.07