1. Java Collection(컬렉션)
Java Collection(컬렉션)은 크게 List, Map, Set
인터페이스를 기준으로 구현체가 존재하며 Stack, Queue
인터페이스도 존재하게 됩니다.
컬렉션이 배열과 다른점?
컬렉션과 배열은 둘 다 개체에 대한 참조를 보유하고 그룹으로 관리 할 수 있다는 점에서 유사합니다. 그러나 Array와 달리 컬렉션은 인스턴스화 할 때 특정 용량을 할당 할 필요가 없습니다. 컬렉션은 개체를 추가하거나 제거 할 때 자동으로 크기를 늘리거나 줄일 수 있습니다. 컬렉션은 int, long 또는 double과 같은 기본 데이터 유형 요소 (기본 유형)를 보유 할 수 없습니다. 대신 Integer, Long 또는 Double과 같은 래퍼 클래스를 보유합니다.
컬렉션의 특징
Java의 거의 모든 컬렉션은 java.util.Collection 인터페이스에서 구현되며 컬렉션은 모든 컬렉션의 기본 부분을 정의합니다.
인터페이스는 컬렉션에 추가 및 제거하기위한 add() 및 remove() 메서드를 각각 지정합니다. 컬렉션을 컬렉션에있는 모든 요소의 간단한 배열로 변환하는 toArray() 메서드도 필요합니다.
마지막으로 contains () 메서드는 지정된 요소가 컬렉션에 있는지 확인합니다. Collection 인터페이스는 java.lang.Iterable의 하위 인터페이스이므로 모든 Collection이 for-each 문의 대상이 될 수 있습니다.
즉, Iterable 인터페이스는 for-each 문에서 사용하는 iterator () 메서드를 제공합니다.
모든 컬렉션에는 컬렉션의 모든 요소를 통과하는 반복문으또한 컬렉션은 제네릭입니다. 모든 컬렉션을 작성하여 모든 클래스를 저장할 수 있습니다. <>는 컬렉션이 보유하는 유형을 지정하는 유형 인수를 보유 할 수 있습니다.
2. List Interface
순서가 있는 데이터의 집합으로 데이터의 중복을 허용합니다
List 인터페이스는 ArrayList의 구현체를 포함하며 직접 커스터마이징을 통하여 사용자가 정의하여 사용이 가능합니다. 그 외에는 LinkedList 구현체가 존재합니다.
3. Map Interface
키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로,순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나 값(Value)의 중복은 허용합니다.
Map의 대표적인 구현체로는 HashMap이 존재하며 Map은 <Key, Value>의 구조로 이루어져있고 구체적인 내부 구현은 HashTable과 일치합니다.
Map같은 경우에는 Key에 중복값을 저장하지 않으며 순서를 보장하지 않지만, LinkedHashMap을 사용하면 Key의 순서를 보장시킬 수 있습니다.
4. Set Interface
Set은 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는 인터페이스 입니다.
Set의 대표적인 구현체로는 HashSet이 존재하며 Value의 중복값을 저장하지 않습니다. 특히, 단일된 값의 중복값을 저장하지 않을때 많이 사용되며 순서를 보장하지 않습니다. 유사하게 TreeSet이라는 구현체는 이진탐색트리를 이용하여 구현되어있습니다.
Map과 유사하게 LinkedHashSet을 사용하여 순서를 보장해줄 수 있습니다.
5. Stack&Queue Interface
Stack 객체는 직접 new 키워드로 사용할 수 있으며, Queue 인터페이스는 JDK 1.5 부터 LinkedList에 new 키워드를 적용하여 사용할 수 있습니다.
Stack Interface
스택은 java.util.Stack을 사용하여 생성됩니다. 스택은 스택에 새 객체를 넣어주고 push () 스택에서 객체를 가져 오는 pop () 메서드를 제공합니다. 스택은 LIFO (last-in-first-out)에 따라 객체를 반환합니다. 예를 들어 스택에서 가장 최근에 배치 된 객체가 먼저 반환됩니다.
그리고, java.util.Stack은 Java에서 제공하는 스택의 표준 구현입니다. Stack 클래스는 LIFO (last-in-first-out) 객체 스택을 나타냅니다. 벡터를 스택으로 처리 할 수있는 다섯 가지 연산으로 java.util.Vector 클래스를 확장합니다.
queue Interface
java.util.Queue 인터페이스는 요소가 삽입 된 순서대로 저장되는 큐 데이터 구조를 정의합니다. 새로운 추가 사항은 줄 끝으로 이동하고 요소는 앞쪽에서 제거됩니다. 선입 선출 시스템으로 구성됩니다.
인터페이스는 java.util.LinkedList, java.util.ArrayDeque 및 java.util.PriorityQueue에 의해 구현됩니다. 또한, LinkedList는 List 인터페이스도 구현하고 하나로 사용할 수도 있습니다.
deque Interface
java.util.Queue 인터페이스는 java.util.Deque 하위 인터페이스에 의해 확장됩니다. Deque는 양방향 대기열을 만듭니다. 일반 대기열에서는 뒤쪽에 삽입하고 앞쪽에 제거 만 허용하는 반면, 데크를 사용하면 앞뒤 모두에서 삽입 또는 제거가 가능합니다. deque는 앞뒤로 또는 한 번에 둘 다 사용할 수있는 대기열과 같습니다. 또한 순방향 및 역방향 반복자를 모두 생성 할 수 있습니다. Deque 인터페이스는 java.util.ArrayDeque 및 java.util.LinkedList에 의해 구현됩니다.