1. JCF (Java Collection Framework)
- Java 에서 Collection 이란 데이터의 집합, 그룹을 의미
- JCF 는 객체들을 한 곳에 모아 관리하고 편하게 사용하기 위해 제공되는 환경이며, 데이터, 자료구조인
컬렉션과 이를 구현하는 클래스를 정의하는 인터페이스를 제공
- Collection 에는 List, Map, Set, Stack, Queue 와 같은 것들이 있다
1) Collection 을 사용하는 이유
- 다수의 Data 를 다루는데 표준화된 클래스를 제공해주기 때문에 자료구조를 직접 구현하지 않고 편하게
사용할 수 있기 때문
- 배열과 다르게 객체를 보관하기 위한 공간을 미리 정하지 않아도 되므로, 상황에 따라 객체의 수를
동적으로 정하여 프로그램의 공간적인 효율성을 높여준다
2. JCF (Java Collection Framework) 상속구조
- 인터페이스는 크레 List, Set, Queue 로 3가지 상위 인터페이스로 분류할 수 있다
- Map 은 Collection 인터페이스를 상속바고 있지 않지만 Collection 으로 분류됨
1) List
- List 인터페이스를 직접 @Override 를 통해 사용자가 정의하여 사용할수 있다
- 대표적인 구현체로는 ArrayList 와 LinkedList 가 있다
- 순서가 있는 데이터의 집합으로 데이터의 중복을 허용
(1) ArrayList
- Java 의 Vector 를 개선한 배열로 구현된 List 즉, 데이터가 저장된 순서가 같다
- 사실상 배열과 같은 자료구조이기 때문에 List 의 연산 자체의 수행시간 속도는 배열과 같다
- 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남
(2) LinkedList
- 다음 노드의 주소를 기억하고 있는 List 로 배열에 비해 삽입과 삭제가 간단
- 탐색의 경우 첫번째 노드부터 탐색하기 때문에 속도가 느림
- 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용
- Stack, Queue, 양방향 큐등을 만들기 위한 용도로 사용됨
2) Map
- 대표적인 구현체료 HashMap 이 존재
- Key(키) - Value(값) 쌍으로 이루어진 데이터의 집합으로 데이터 순서를 보장하지 않으며 Key 의 중복을
허용하지 않으나 Value 의 중복은 허용
- Key 에 대한 순서를 보장하기 위해서는 LinkedHashMap 을 사용
(1) HashMap
- 가장 일반적으로 사용하는 Map
- Key 값에 해시 함수를 적용하여 나온 Index 에 Value 를 저장하는데 중복과 순서가 허용되지 않으며
null 값이 올 수 있다
(2) HashTable
- HashMap 보다는 느리지만 동기화를 지원한다
- HashMap 과 다른점은 Key 값 혹은 Value 값에 null 을 넣으면 컴파일 에러 발생
(3) TreeMap
- Red-Black Tree 자료구조를 이용한 Map
- Tree 구조이기에 어느 정도 순서를 보장함
- 정렬된 순서대로 Key, Value 를 저장하여 검색이 빠름
3) Set
- 대표적인 구현체료 HashSet 이 존재
- Value 에 대해서 중복된 값을 저장하지 않는다
- Set 자료구조는 Map 의 Key - Value 구조에서 Key 대신 Value 가 들어가 Value 를 Key 로 하는 자료구조이다
- Map 과 같이 Set 도 순서를 보장하지 않으며 순서를 보장하기 위해서는 LinkedHashSet 을 사용
- 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않음
(1) HashSet
- HashMap 에서 Key 값이 없는 자료형 집합
- Value 가 포함되어 있는지 아닌지만 관심이 있다
- 순서를 보장하지 않으며, 중복값을 허용하지 않는다
- 가장 빠른 임의 접근 속도이고, 순서를 예측할 수 없다
(2) TreeSet
- Red-Black Tree 자료구조를 사용한 Set
- 정렬 방법을 지정할 수 있다
4) Stack
- 직접 new 연산자로 객체를 생성하여 사용가능
5) Queue
- LinkedList 에 new 연산자로 객체를 생성함으로써 사용가능
'CS 전공지식' 카테고리의 다른 글
24.02.07 Java 관련 2 (1) | 2024.02.07 |
---|---|
24.02.06 Java 관련 1 (1) | 2024.02.06 |
24.02.01 JDK, JRE 란? (0) | 2024.02.01 |
24.01.31 ORM (2) | 2024.01.31 |
24.01.30 JVM 과 바이트 코드 (1) | 2024.01.30 |