안녕하세요 이번 포스팅에서는 자바의 컬렉션(Collection)에 대해서 알아보겠습니다 Collection은 많이 사용되지만 정확하게 어떤 것인지는 저도 모른채로 사용을 했습니다 이번 포스팅을 하면서 제 나름대로 정리해봤습니다 목차 객체의 모음, 그룹이라 할 수 있습니다 자바에서 모든 컬렉션 클래스와 인터페이스를 포함 하는 "Collection Framework"라는 개념이 JDK 1.2에서 정의가 되었습니다 Collection 인터페이스(java.util.Collection) 와 Map 인터페이스(java.util.Map) 자바 컬렉션 클래스의 주요 "루트"인터페이스입니다 Collection 인터페이스는 List, Set과 이미지에는 없지만 Queue 3가지의 상위 인터페이스로 분류할 수 있습니다 Map은 Collection에 포함되지 않지만 Collecion으로 분류를 해줍니다 Collection을 사용하는 이유에는 3가지가 있습니다 1. 일괄된 API : Collection의 일관된 API를 사용하여 Collection 밑에 있는 모든 클래스(ArrayList, Vector, LinkedList 등) Collection에서 상속받아 통일된 메서드를 사용하게 됩니다 2. 프로그래밍 노력 감소 : 객체 지향 프로그래밍의 추상화의 기본 개념이 성공적으로 구현되어있습니다 3. 프로그램 속도 및 품질 향상 : 유용한 데이터 구조 및 알고리즘은 성능을 향상시킬 수 있습니다 Collection을 사용하여 최상의 구현을 생각할 필요없이 간단하게 Collection API를 사용하여 구현을 하면 됩니다 아래에서는 Collection의 세부 목록에 대해서 상세하게 들어가보겠습니다 List Interface이 인터페이스는 정렬된 모든 객체 컬렉션을 저장할 수 있는 목록 데이터 전용입니다 인터페이스에는 ArrayList, Vector, Stack 등이 대표적으로 있습니다 1. ArrayList 동적 배열을 제공합니다. 표준 배열보다 느릴 수 있지만 배열에서 많은 움직임이 필요한 프로그램에서 유용합니다 컬렉션에서 개체를 추가, 삭제하면 ArrayList의 크기가 자동으로 조정됩니다 사용 예제
결과
2. LinkedList 요소가 연속 된 위치에 저장되지 않고 모든 요소가 데이터 부분과 주소 부분이 있는 별도의 객체에 저장됩니다 포인터와 주소를 사용해서 데이터를 가져옵니다 각 요소를 노드라고 부릅니다 자료구조를 배웠다면 어느정도 이해가 되는 내용일 것입니다 ㅎ 사용 예제
결과 화면
3. Vector 동적 배열을 제공하고, 표준 배열보다 느리지만 많은 움직임이 필요한 프로그램에서 유용합니다 ArrayList와 유사합니다 하지만 차이점은 Vector는 동기화가 되고, ArrayList는 동기화가 되지 않는다는 것이 차이점입니다 사용 예제
결과 화면
4. Stack 스택 클래스 모델 및 스택 데이터 구조를 구현할 때 주로 사용합니다 후입선출을 기본 원칙으로 합니다 사용 예제
결과 화면
Queue Interface대기열 인터페이스라는 이름에서 알 수 있듯이 선입선출을 기본적으로 사용합니다 순서가 중요한 업무에서 주로 사용합니다 예를 들어서 선착순 티켓 판매가 있습니다 PriorityQueue, Deque, ArrayDeque 등과 같은 클래스가 있습니다 1. PriorityQueue 우선 순위에 따라 객체를 처리해야 할 때 사용됩니다 선입선출 기본으로 하지만 우선 순위에 따라 먼저 처리해야할 것이 있다면 우선 순위 힙을 기반으로 처리합니다
결과 화면
Deque Interface큐 데이터 구조의 변형입니다 양방향 큐라고도 불리고 양쪽 끝에서 요소를 추가하고 제거할 수 있는 구조입니다 1. ArrayDeque 크기가 조정되는 배열이고 양쪽 끝에서 요소를 추가하고 제거하는 구조입니다 사용 예제
결과 화면
Set Interface중복 값을 저장할 수 없는 정렬되지 않은 데이터 모음입니다 중복을 방지하고 고유한 데이터만 저장해야하는 경우 사용됩니다 HashSet, TreeSet, LinkedHashSet 등에서 사용됩니다 1. HashSet HashSet에 입력되는 데이터는 동일한 순서로 삽입되는 것을 보장하지 않습니다 이 클래스는 NULL 요소 삽입을 허용합니다 사용 예제
결과 화면
2. LinkedHashSet HashSet과 유사하지만 차이점은 데이터를 저장하는 순서를 유지합니다 사용 예제
결과 화면
Sorted Set Interface위의 Set Interface와 유사하지만 순서를 정렬하는 메서드를 제공합니다 1. TreeSet Tree를 사용하여 저장합니다 데이터의 순서는 자연적인 순서(오름차순)대로 유지가 됩니다 사용 예제
결과 화면
Map InterfaceMap은 데이터를 키 - 값으로 매핑을 지원하는 데이터 구조입니다 동일한 키가 여러 개가 있을 수 없어 중복 키는 지원하지 않습니다 키를 기반으로 프로그래밍을 하는 경우 유용합니다 Map Interface는 HashMap, TreeMap 등의 클래스가 있습니다 1. HashMap HashMap은 자바의 Map Interface의 기본적인 방법입니다 데이터를 키 - 값 형태로 저장을 합니다 HashMap의 데이터에 접근하려면 키를 알고 있어야 접근이 가능합니다 HashMap은 Hashing이라는 기술을 사용하는데 해싱은 인덱싱 및 검색 작업이 더 빨라지도록 키에 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근하는 방식입니다 사용 예제
결과 화면
출처 : https://www.geeksforgeeks.org/collections-in-java-2/ |