본문 바로가기
Work/Java

[Java] Java Collection 구조 정리

자바의 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자료형중 StackArrayList를 사용한 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] - 시간복잡도 - 총정리

 

시간복잡도 - 총정리

1. 시간 복잡도란 ? 알고리즘의 효율성을 판단하기 위한 지표로서, 프로그램 수행에 걸리는 절대적 시간이 아닌, 알고리즘을 수행하는데 사용되는 연산들이 몇 번 이루어지는가에 대한 것을 상

bangu4.tistory.com

 

 

자료구조별 대략적인 특징

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 인터페이스와 클래스 - 총정리

 

[Java] LIST 인터페이스와 클래스 - 총정리

Collection 자료구조중 List 에 대해서 정리해보겠다. https://bangu4.tistory.com/194 [Java] Java Collection 구조 정리 자바의 Collection 자료구조 1. Collection Interface Iterator 인터페이스를 상속한 C..

bangu4.tistory.com

2021.07.02 - [일/Java] - [Java] Set 인터페이스와 클래스 - 총정리

 

[Java] Set 인터페이스와 클래스 - 총정리

지난번에 자바의 다양한 Java.Utill 패키지에 포함되는 Collection 자료구조들을 정리하였다. https://bangu4.tistory.com/194 [Java] Java Collection 구조 정리 자바의 Collection 자료구조 1. Collection Inter..

bangu4.tistory.com

 

 

 

챔죠 - 너무많은 글을 읽어서 유용했던거 몇개만

더보기

 

https://joooootopia.tistory.com/13

 

Java Collection Framework :: 자바의 자료구조 (List, Set, Map)

Java Collection Framework(JCF) : Java에서 데이터를 저장하는 자료구조들을 한 곳에 모아 편리하게 관리하고 사용하기 위해 제공하는 것. 크게 List, Set, Map으로 구분할 수 있다. 이번 포스팅에서는 각각이

joooootopia.tistory.com

https://gem1n1.tistory.com/97

 

[JAVA Collections API] 자료구조 요약: 구조/성능/용도

개요 이 포스팅에서는 자바 Collections API로 표현되는 자료구조들의 성능에 대해서 이야기하고자 한다. 성능은 시간 복잡도(Time Complexity)를 기준으로 하며, 발생할 수 있는 최대 복잡도를 가리키는

gem1n1.tistory.com

http://blog.breakingthat.com/category/java/collection/

 

Collection Archives - 조금 늦은, IT 관습 넘기 (JS.Kim)

> Map (Interface)   Map의 가장 기본 개념은 Key를 Value에 매핑하는 자료의 한 구조란 것 이다.  Key는 중복될 수 없으며, 각 Key는 하나의 Value(객체)만을 가질 수 있다.   이는 Map안에 존재하는 Key로 재

blog.breakingthat.com

https://thefif19wlsvy.tistory.com/41

 

이터레이터(Iterator) 란?

Iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것이다. 컬렉션 프레임워크란 데이터를 저장하는 클래스들을 표준화한 설계이다. 컬렉션

thefif19wlsvy.tistory.com

 

https://yeon-kr.tistory.com/113

 

[Java]Collection vs Collections 차이점?

오늘은 Collection과 Collections에 대해서 공부해보려고 합니다. 생긴 것은 정말 비슷하게 생겼습니다. 단순히 해석하기에는 집합, 집합들입니다. "아니 이제는 프로그래밍 언어도 복수, 단수 따지나?

yeon-kr.tistory.com

 

 

 

https://gangnam-americano.tistory.com/41

 

[JAVA] Java 컬렉션(Collection) 정리

[JAVA] Java 컬렉션(Collection) 정리 ■ Java Collections Framework(JCF) Java에서 컬렉션(Collection)이란 데이터의 집합, 그룹을 의미하며 JCF(Java Collections Framework)는 이러한 데이터, 자료구조인 컬..

gangnam-americano.tistory.com