자바의 Collection 자료구조
자바에서 사용하는 컬렉션 프레임워크의 주요 클래스표이다.
좀더 상세한 클래스와 구현 인터페이스는 아래와 같다
1. Collection Interface
Iterator 인터페이스를 상속한 Collection은 가장 기본이 되는 인터페이스로 add(), size(), iterator() 메소드를 가지고 있다.
Collection 인터페이스 List와 Set 인터페이스의 많은 공통된 부분을 Collection 인터페이스에서 정의하고,
두 인터페이스는 그것을 상속받습니다.
boolean add(E e) | 해당 컬렉션(collection)에 전달된 요소를 추가함. (선택적 기능) |
void clear() | 해당 컬렉션의 모든 요소를 제거함. (선택적 기능) |
boolean contains(Object o) | 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) | 해당 컬렉션과 전달된 객체가 같은지를 확인함. |
boolean isEmpty() | 해당 컬렉션이 비어있는지를 확인함. |
Iterator<E> iterator() | 해당 컬렉션의 반복자(iterator)를 반환함. |
boolean remove(Object o) | 해당 컬렉션에서 전달된 객체를 제거함. (선택적 기능) |
int size() | 해당 컬렉션의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함. |
P.S Collections란?
Collection인터페이스와 달리 Java 1.2이상부터 Collections라는 static클래스가 존재합니다.
Collections 는 컬렉션 프레임웍에 속하는 클래스를 지원해주는 다양한 메소드가 존재합니다.
Collections 클래스의 메소드
Collections.sort(List L) | 리스트를 정렬합니다. |
Collections.sort(List L , reverseOrder()) |
리스트를 역순으로 정렬합니다. |
max(List L) , min(List L) | 리스트에서 최대 최솟값 |
shuffle(List L) | 리스트를 랜덤으로 섞음 |
binarySearch(List L , Key) | 오름차순으로 정렬된 리스트에서 이진검색을 통해 위치를 반환, 실패시 -1반환 |
disjoint(List L1 , List L2) | 두 리스트의 값이 완전히 다른지 검사 , 하나라도 같은값이 있으면 False |
메소드 예문 Code
- List자료형중 Stack과 ArrayList를 사용한 Collection의 메소드입니다.
public static void main(String[] args) {
// List의 Class 중 ArrayList, Stack을 사용하여 코드작성
ArrayList<Integer> list = new ArrayList<>();
Stack<Integer> s = new Stack<>();
//초기화
for (int i = 0; i < 10; i++)
list.add(i);
for (int i = 0; i < 10; i++)
s.push(i);
// max() , min() 최대 최소 찾기
System.out.println("s max() : " + Collections.max(s));
System.out.println("list min() : " + Collections.min(list));
//sort()
Collections.sort(s); //오름차순
Collections.reverse(s); //내림차순
Collections.sort(s, Collections.reverseOrder()); // 내림차순
System.out.print("\n역순 출력 : ");
for(int i : s)
System.out.print(i+" ");
System.out.println("\n");
// 섞기(Shuffling) 랜덤하게 섞는다
Collections.shuffle(s);
System.out.print("랜덤 출력 : ");
for(int i : s)
System.out.print(i+" ");
System.out.println("\n");
// binarySearch() -> 해당값의 index를 반환 (실패시 -1 반환)
// 오름차순 정렬이 되어있어야 사용가능하다.
Collections.sort(s); //오름차순
System.out.print("정방향 정렬 : ");
for(int i : s)
System.out.print(i+" ");
System.out.println("\n\n이진탐색 5값의 위치: "+Collections.binarySearch(s, 5));
// 두 리스트가 다른지 확인 disjoint
// 두 리스트중 공통값이 있으면 False
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(99,88));
System.out.println("\ndisjoint (완전히 다른가?) : "+ Collections.disjoint(list, list2));
}
다시 본문으로 돌아가겠습니다.
Collection이란 말대로 데이터의 그룹 집합체라는 의미를 가진다.
자바에 Collection 자료구조는 크게 List , Set , Map 3가지로 나눌 수 있다.
그중 Collection 인터페이스를 상속하는 자료구조는 List , Set이며,
Map은 기본적으로 Key, Value 라는 다른 구조를 가지기 때문에, 독립적인 인터페이스가 구현되어 있다.
Collection 인터페이스를 상속하는 클래스들을 Collections 라고 부릅니다.
자바에서 해당 Collections 를 사용법을 아는것도 중요하지만,
해당 자료구조가 어떨때 사용되야하며, 언제 유리한지,
어느정도의 시간복잡도와 성능을 가지는지도 알수록 좋은 프로그래머겠죠?
그래서 이러한 내용까지 함께 정리해보도록 하겠습니다.
시간복잡도란? 아래글을 참조
2021.07.02 - [공부/Algorithm] - 시간복잡도 - 총정리
자료구조별 대략적인 특징
Class | Base Class | Base Interface | 중복 | 순서 | 정렬 | Thread-safe |
ArrayList | AbstractList | List | Yes | Yes | No | No |
LinkedList | AbstractSequentialList | List;Deque | Yes | Yes | No | No |
Vector | AbstractList | List | Yes | Yes | No | Yes |
HashSet | AbstractSet | Set | No | No | No | No |
LinkedHashSet | HashSet | Set | No | Yes | No | No |
TreeSet | AbstractSet | Set;NavigableSet;SortedSet | No | Yes | Yes | No |
HashMap | AbstractMap | Map | No | No | No | No |
LinkedHashMap | HashMap | Map | No | Yes | No | No |
Hashtable | Dictionary | Map | No | No | No | Yes |
TreeMap | AbstractMap | Map;NavigableMap;SortedMap | No | Yes | Yes | No |
자료구조별 대략적인 성능표
2. Collection 하위 인터페이스
아래는 종류와 특징만 대략적으로 정리하고
하나하나 인터페이스를 구현한 하위 클래스별로 어떤 메소드가 있고 어떻게 사용하는지
다른글에서 세세하게 다루겠습니다.
1) List 인터페이스
특징
index 라는 식별자로 순서를 가지며, 데이터의 중복을 허용하는 자료구조.
- ArrayList
- 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남
- 배열과 달리 초기크기를 지정하지 않아도 되므로, 삽입 삭제가 자유로움
- LinkedList
- 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정 하면 되기에 유용
- 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임 - Vector
- 과거에 대용량 처리를 위해 사용했으며, 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지 않고 무거워 잘 쓰이지 않음
2) Set 인터페이스
순서가 없고, 데이터 유일성을 가지는 자료구조.
- HashSet
- 가장빠른 임의 접근 속도
- 순서를 예측할 수 없음 - TreeSet
- 정렬 방법을 지정할 수 있음
3) Map 인터페이스
키(Key), 값(Value)의 쌍으로 이루어진 자료구조,
순서가 없고, 키(Key)는 유일성을 가지고, 값(Value)의 중복은 허용한다.
- Hashtable
- HashMap보다는 느리지만 동기화 지원
- null불가 - HashMap
- 중복과 순서가 허용되지 않으며 null값이 올 수 있다. - TreeMap
- 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름
Collection 인터페이스를 상속한 클래스들을 인터페이스 별로 상세하게 아래글에서 다루겠습니다.
2021.07.06 - [일/Java] - [Java] LIST 인터페이스와 클래스 - 총정리
2021.07.02 - [일/Java] - [Java] Set 인터페이스와 클래스 - 총정리
챔죠 - 너무많은 글을 읽어서 유용했던거 몇개만
'Work > Java' 카테고리의 다른 글
[Java] 자바 공부 사이트 모음 (0) | 2021.06.29 |
---|---|
[Java] System 클래스 -정리 (0) | 2021.06.29 |
[Java] Array와 List 상황별 성능 비교 (0) | 2021.06.28 |
[Java] String, StringBuffer, StringBuilder 차이점 (2) | 2021.06.28 |
[Java] java.lang 패키지 - 정리 (0) | 2021.06.24 |