일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 운영체제
- Kotlin
- DiffUtil
- GetX
- flutter
- 프로세스
- 내부 단편화
- 디자인 패턴
- recyclerview
- Dispatchers
- 뷰홀더
- 자이고트
- AAC
- appcompatactivity
- http 역사
- http발전과정
- appcompatacitivity
- AsyncListDiffer
- NestedScrollView
- 리사이클러뷰풀
- 리사이클러뷰
- 데코레이터 패턴
- 상태관리
- 물리 메모리
- viewModelScope
- 플로이드워셜
- 안드로이드
- apk 빌드 과정
- 절대 주소
- Android
- Today
- Total
hong's android
[Java] Collection Framework 본문
Collection 이란?
목록성 데이터를 처리하는 자료구조
- java.util 패키지에 Collection은 속해있다.
- 형태가 비슷한 여러개의 값들을 저장하고 관리하기 위해선 배열이 필요하다. 하지만 크기가 지정되어있지 않은경우엔 따로 배열의 크기를 필요에 따라 계속 늘려주는 작업을 해야한다. Collection 인터페이스는 가변 크기를 가진다.
- 하위 인터페이스는 List,Set,Queue,Map이 있고 구현 클래스들은 아래와 같다.
자료구조 : 데이터들을 효율적으로 처리하기위해 만든 구조
특징
1. collection은 iterable인터페이스를 구현하기 때문에 데이터를 순차적으로 가져올 수 있다.
Public inetrface Collection<E> extends Iterable<E>
2. List를 구현한 Vector는 Thread Safe 하다. 반면 Arraylist는 Thread Safe하지 않다. Vector를 상속받은것이 Stack 클래스이다.
3. Abstract class는 위 그림에 나와있지 않지만 Collection 인터페이스를 구현한 java.util.AbstractCollection 상위엔 java.lang.object 클래스가 있다.
List
순서가 있는 collection , 중복 허용
List를 구현한 클래스
- vector : 스레드 안전성 보장, vector에 의해 구현된 stack 은 LIFO(후입 선출)
- Arraylist : 스레드 안정성 보장하지 않음
Arraylist는 쓰레드 안정성을 보장하지 않기 때문에 안정성을 보장한 객체를 생성하기 위해선 따로 처리해야한다.
객체 선언시 매개변수로 크기값을 넘겨주지않으면 기본 초기 크기는 10이다. 10개 이상의 데이터가 들어가면 크기를 늘리는 작업이 arraylist 내부에서 실행되기때문에 애플리케이션 성능에 영향이간다.
Set
순서가 없고 값을 확인하는 용도의 collection, 중복 허용되지 않음
만약 중복되지 않은 데이터를 list로 추가하고 싶을때 데이터가 있는지 확인하려면 모든 데이터들을 확인해야한다. 하지만 set은 따로 로직을 구성할 필요없이 중복되지 않고 추가된다.
Set을 구현한 클래스들
- HashSet : HashTable에 저장한다. 값이 있는지 확인하기위해 해시 함수를 이용해서 배열의 인덱스를 구한다.
- TreeSet : 데이터의 값에 따라 정렬되는 Red-Black 트리 구조, 정렬되어있기 때문에 hashset 보다 약간 성능이 느리다.
- LinkedHashSet
Queue
먼저 들어오는 데이터를 먼저 처리한다.
LinkedList : Queue를 구현하고, 동시에 List를 구현하기 때문에 Queue도 되고, List도 된다.
배열의 중간에 있는 데이터를 삭제하거나 추가하는경우 Arraylist와 Vector는 값을 삭제하고 뒤에 있는 값들을 한칸씩 이동해야한다. 하지만 LinkedList는 앞의 데이터와 뒤의 데이터를 연결해주기만 하면된다. LinkedList는 처음부터 크기를 지정해놓지 않는다.
Reference.
자바의 정석 Vol2
'Develop > Java' 카테고리의 다른 글
[자바] object 클래스와 String 클래스 (0) | 2023.02.28 |
---|---|
[Java] java.lang.Object (0) | 2023.02.11 |
[Java] 동시성 문제와 synchronized의 성능 (0) | 2023.02.11 |
[Java] 제네릭, 래퍼 클래스 (0) | 2023.02.11 |
[Java] Synchronized (1) | 2023.02.11 |