자바의 정석 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
'Computer Engineering > Java & Spring' 카테고리의 다른 글
Eureka 서버에 클라이언트 서버 여러개 연결해보기 (0) | 2023.02.21 |
---|---|
자바의 정석 : 13장 스레드 (0) | 2022.09.13 |
자바의 입력을 담당하는 BufferedReader와 StringBuilder (2) | 2022.08.24 |
스프링의 세가지 핵심 프로그래밍 모델(loC, AOP, PSA) (0) | 2022.07.21 |
[spring] 스프링 빈과 의존관계2- 자바 코드로 직접 스프링 빈 등록 (0) | 2022.06.26 |