Computer Engineering/Java & Spring

[자바의 정석 2회독] 11챕터 : 컬렉션 프레임 웍

soohey 2022. 9. 11. 23:34

자바의 정석 2회독차에 기록하고 싶은 부분만 기록하기!

 

챕터 11 : 컬렉션 프레임 웍

  • 데이터 군을 저장하는 클래스들을 표준화한 설계

컬렉션은 다수의 데이터, 데이터 그룹

프레임웍은 표준화된 프로그래밍 방식

인터페이스 종류

1. list

  • 순서가 있는 데이터 집합, 데이터 중복을 허용

2. Set

  • 순서를 유지하지 않는 데이터 집합, 데이터 중복 허용 x

3. Map

  • 키와 값의 쌍으로 이루어진 데이터 집합, 순서 유지 x, 키는 중복 허용 x, 값은 중복 허용

ArrayList

  • 기존의 Vector을 개선
  • Object 배열을 이용해 데이터를 순착적으로 저장
  • 배열에 더이상 저장할 공간이 없으면 큰 새로운 배열 생성후 복사한 뒤 저장
  • list2에서 list1과 공통되는 요소들을 찾아 삭제할때, 변수 i를 증가시켜가며 삭제하면 빈 공간을 채우기 위해 나머지 요소들이 자리이동을 하기 때문에 올바른 결과를 얻을 수 없다.
  • 그래서 제어변수를 감소시켜가면서 삭제를 해야 자리이동이 발생해도 영향을 받지 않고 작업이 가능하다.
  • ArrayList 생성시 저장할 요소의 개수를 고려해서 실제 저장할 개수보다 약간 여유있는 크기로 하는 것이 좋음
  • 용량 변경시 기존의 두배로 생성한 뒤 복사하기 때문에 효율적이지 않음

배열

  • 구조가 간단하며 사용하기 쉽다.
  • 접근시간이 가장 빠름
  • 크기를 변경할 수 없음 -> 실행속도 향상시키려면 크기를 크게 설정해야해서 메모리 낭비
  • 비순차적 데이터의 추가/삭제에 시간 낭비 -> 중간 데이터 추가시, 빈자리를 만들기 위해 복사해야됨

-> 이를 보완하기위해 링크드 리스트

Linked List

  • 배열은 모든 데이터가 연속적으로 존재, 링크드리스트는 불연속적으로 존재하는 데이터를 서로 연결
  • 이동방향이 단방향, 이전 요소에 대한 접근이 어려움 -> 더블 링크드 리스트

이중 원형 연결리스트

  • 더블 링크드 리스트에서 첫번째 요소와 마지막 요소를 연결

스택

  • 마지막에 저장한 데이터를 먼저꺼냄 (LIFO)
  • 뒤집힘

  • 먼저 저장한 데이터를 먼저 꺼냄 (FIFO)
  • 차례대로
  • 추가/삭제가 용이한 linked list로 구현

디큐 (Doble - Ended Queue)

  • 양 쪽 끝에 추가/삭제가 가능함.
  • ArrayDeque, LinkedList로 구현
  • offer(추가), poll(삭제)
  • 끝에 저장, 끝에 추가, 앞에서 저장, 앞에서 삭제

Iterator

  • 컬렉션에 저장된 요소를 읽어오는 방법
  • hasNext () : 읽어올 요소 유무 확인
  • next() : 다음 요소 읽기
  • remove() : 읽어온 요소 삭제
  • 컬렉션 요소를 읽는 방식을 표준화했기 때문에 코드 재사용성을 높이는 것이 가능
  • 공통 인터페이스를 정의해 표준을 정의하고 표준을 따르도록 하여 코드의 일관성을 유지하여 재사용성을 극대화하는 것 -> 객체 지향 프로그래밍의 중요 목적
  • 참조 변수의 타입을 Collection으로 하기 -> 특정 컬렉션에만 있는 메소드만 사용할 것이 아니라면 범위를 넓게 잡아주기. 나중에 바꿔야 한다면 코드를 변경/검토해야 하는 단점이 생김.
  • Map은 키/값을 쌍으로 ㅓ장하기에 iterator() 직접 호출이 불가능하고 대신 keySet(), entrySet()으로 키와 값을 따로 Set으로 얻은 후 iterator()을 호출해야함.

ListIterator

  • Iterator을 상속받은 후 기능추가
  • 양방향 이동이 가능, List 인터페이스만 사용가능
  • 역방향 읽어오는 것이 가능
  • remove()는 next()로 읽어 온 객체를 삭제하는 것이기 때문에 remove()전에 next()가 전제되어야 한다.
  • lastRet위치의 객체를 삭제하면 cursor값을 감소시킨후 lastRet -1로 초기화

배열

  • 순차검색 : 첫번째 요소부터 순서대로 검색
  • 이진검색 : 배열의 검색 범위를 반복적으로 절반씩 줄여가며 검색 -> 빠름

Comparator

  • 컬렉션 정렬시 (Arrays.Sort..) 할때 사용됨.

HashSet

  • 새로운 요소 추가시 add/addAll 사용
  • 이미 저장된 요소와 중복된 요소를 추가시 false를 반환하며 추가 실패
  • 저장순서를 유지하지 않음 유지하려면 LinkedHashSet 사용하기

Properties

  • Hashtable을 상속받아 구현
  • (String, String)의 형태로 저장
  • 주로 애플리케이션 환경설정에 관련된 속성을 저장
  • 저장 순서 유지 x