티스토리 뷰

코딩/JAVA

컬렉션 프레임워크

ehzim 2024. 4. 11. 23:37

💡컬렉션 프레임워크란?

다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다.

데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것 이다.

이러한 컬렉션 프레임워크는 인터페이스를 사용하여 구현된다.

사용 시 객체 지향적이고 재사용성이 높은 코드를 작성할 수 있다.

 

컬렉션 프레임워크는 List, Set, Map, Queue 등 이 있습니다.

이때 List와 Set 은 모두 Collection 인터페이스를 구현하지만 Map은 키,값으로 관리하는 구조이므로 별도로 정의된다.

 

 

 

 

 

💡List 인터페이스

List는 배열 형태의 구조를 말한다.

저장되는 요소들의 순서가 있으며 저장 값의 중복을 허용한다.

List 인터페이스를 구현한 클래스는 ArrayList, LinkedList 등이 있다.

 

 

 

 

ArrayList

ArrayList는 List를 구현한 클래스이다.

Object 배열을 이용해 데이터를 순차적으로 저장되므로 객체가 인덱스로 관리되는데 인덱스를 사용하여 원하는 요소에 직접 액세스할 수 있기 때문에 요소에 빠르게 접근할 수 있다.

ArrayList는 크기가 가변적으로 변하는 선형리스트인데 요소를 추가하거나 제거할 때 자동으로 크기가 조정된다.

요소를 배열로 저장하기 때문에 순회 및 반복 작업이 빠르다.

 

요소를 추가하면 0번 인덱스부터 차례대로 요소가 저장된다. 다만 특정 메서드를 사용해서 원하는 위치에 요소를 추가하거나 삭제 또는 반환할 수 있다.

 

 

LinkedList

LinkedList는 List 인터페이스를 구현하면서 Queue 인터페이스도 함께 구현한다. 

이것은 말 그대로 요소들이 서로 유기적으로 연결(Link)되어 있는 리스트이며 각 요소가 자신의 이전 요소의 주소와 다음 요소의 주소를 가지고 있는 구조이다.

LinkedList는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조이다.

데이터를 담고 있는 노드들이 연결되어 있고 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당한다.

노드가 LinkedList에 객체를 추가하거나 삭제하면 앞 뒤 링크만 변경되고 나머지 링크를 변경되지 않는다.

그러므로 중간에 데이터를 추가 혹은 삭제하더라도 전체 인덱스가 한 칸씩 뒤로 밀리거나 당겨지는 일이 없기 때문에 ArrayList에 비해 데이터의 추가나 삭제가 용이하나 인덱스가 없기때문에 특정 요소에 접근하기 위해서는 순차 탐색이 필요 해 검색 속도가 떨어진다.

 

그러므로 탐색 또는 정렬를 목표로 한다면 ArrayList를 데이터의 추가/삭제가 많은 경우 LinkedList를 사용하는 것이 좋다.

 

 

 

 

 

💡Set 인터페이스

Set은 요소들을 집합적으로 모아놓은 자료구조이다.

Set 인터페이스의 특징으로는 중복된 데이터를 가지지 않으며 저장 순서를 유지하지 않는다는 특징이 있다.

Set 인터페이스를 구현한 클래스로는 HashSet, TreeSet 등이 있다.

 

 

 

HashSet

HashSet은 Set 인터페이스를 구현하였으므로 중복이 없고 저장 순서가 없다.

Collection 인터페이스의 메서드를 구현하였으므로 같은 메서드명으로 컬렉션 작업이 가능하다.

 

 

TreeSet

TreeSet은 기존의 Set 인터페이스에서 정렬기능이 추가된 형태이다.

하지만 중복된 데이터는 허용하지 않는다.

TreeSet이 정렬하는 방식은 기존의 데이터와 비교해 작은 값은 왼쪽, 큰 값은 오르쪽에 추가해 마치 Tree 구조처럼 저장하는 방식이다. 이러한 규칙을 통해 정렬되기 때문에 범위 검색에 효과적인 자료구조이다.

 

 

 

 

 

 

💡Map 인터페이스

Map 인터페이스는 Key Value를 쌍르로 저장하는 구조이다.

Map 인터페이스를 구현한 클래스는 HashMap, TreeMap 등이 있다.

일반적으로 빠른 조회 성능을 요구하는 경우에는 HashMap, 정렬된 순서가 필요한 경우에는 TreeMap을 사용한다.

 

 

HashMap

Map 인터페이스의 해시 테이블 기반 구현체 중 하나이다.

내부적으로 해시 함수를 사용해 키와 값을 저장하고 검색한다.

해시 함수를 사용해 키를 해시코드로 매핑하므로 빠른 조회 성능을 제공한다.

삽입 순서나 정렬된 순서를 보장하지 않는다.

HashMap은 스레드 안전성을 보장하지 않는다. 동시에 여러 스레드가 HashMap을 수정하려면 외부에서 동기화 처리를 해주어야 한다.

 

 

TreeMap

TreeMap은 Map 인터페이스의 정렬된 트리 기반 구현체이다. 내부적으로 레드-블랙 트리라는 균형 이즌 검색 트리를 사용해 데이터를 저장하고 정렬한다.

TreeMap은 키의 자연 순서 또는 Comparator를 통해 정의된 순서로 키-값 쌍을 저장하고 정렬한다.

TreeMap은 HashMap과 다르게 스레드 안전성을 보장한다. 동시에 여러 스레드가 TreeMap을 수정해도 안전하게 사용할 수 있다.

 

 

 

 

 

💡Queue 인터페이스

Queue 인터페이스는 먼저 들어온 데이터를 먼저 내보는 형태이다.

먼저 들어온 요소가 먼저 출력되기 때문에 FIFO 구조라고도 한다.

Queue의 메서드는 두가지 종류가 있는데 add(), element(), remove()는 예외를 발생시켜 프로그램을 멈춘다.

offer(), peek(), poll() 메서드는 예외를 발생시키기 않아 프로그램을 계속 실행한다.

 

 

 

 

💡Stack 인터페이스

Stack 인터페이스는 마지막에 들어온 데이터가 가장 먼저 나가는 자료 구조이다.

요소를 저장하는 방향과 출력하는 방향이 같아 요소가 저장되어 쌓이고 마지막에 추가되는 요소가 가장 먼저 출력되기 때문에 LIFO 구조라고도 불린다.

 

 

 

 

 

 

 

 

 

 

 

 

'코딩 > JAVA' 카테고리의 다른 글

Character 클래스의 메서드 (isUpperCase / toUpperCase / toLowerCase 등)  (0) 2024.04.18
JAVA 정리 - 2  (0) 2024.04.15
== 과 equals의 차이  (0) 2024.04.09
StringBuilder  (1) 2023.11.10
현재 시간 구하는 프로그램  (0) 2023.11.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday