java collections framework tutorial
이 튜토리얼에서는 컬렉션 계층 구조, 다양한 인터페이스 및 JCF의 장점과 함께 JCF (Java Collections Framework)에 대해 자세히 설명합니다.
이것에 대한 설득력있는 자습서를 바랍니다. 초보자를위한 Java 시리즈 Java에 대한 지식을 풍부하게하는 데 정말 도움이됩니다.
이전 튜토리얼에서는 Java의 기본 I / O 작업 . 이 튜토리얼에서는 JCF (Java Collections Framework)에 대해 자세히 알아 봅니다.
JCF (Java Collections Framework)에는 객체 그룹을 저장하고 조작하는 아키텍처를 제공 할 수있는 인터페이스, 추상 클래스 및 클래스가 포함되어 있습니다.
학습 내용 :
- Java Collections Framework에 대한 비디오 자습서
- 결론
Java Collections Framework에 대한 비디오 자습서
Java의 Arraylist에 대한 지식 :
실시간 예제를 사용하여 Java에서 인터페이스 및 대기열 인터페이스 설정 :
Java의 HashMap, TreeMap 및 HashTable :
지금까지 다양한 유형의 데이터를 저장하는 변수를 보았습니다. 이들은 단일 단위이며 저장하고 처리 할 데이터가 방대한 양의 경우별로 도움이되지 않습니다. 아시다시피 데이터는 컴퓨터 처리의 가장 중요한 구성 요소입니다.
애플리케이션은 데이터를 추출 및 수집하고, 유용한 정보를 찾기 위해 처리하고, 솔루션에 도달하는 데 효율적으로 사용할 수 있도록 앞뒤로 전달할 수 있어야합니다.
이 소프트웨어 세계에서 우리는 소프트웨어 프로그램이 결과를 저장, 읽기, 처리 및 최종적으로 출력 할 수 있도록 특정 방식으로 구조화해야하는 데이터를 저장합니다. 이것은 데이터 구조를 사용하여 수행됩니다.
거의 모든 프로그래밍 언어가 데이터 구조를 지원합니다. 데이터 구조는 데이터의 구조화 된 표현으로 정의 할 수 있습니다. 프로그래밍 언어는 데이터 구조를 조작하기 위해 API (Application Programming Interface) 기능을 제공합니다.
수집 프레임 워크 필요
Java 1.2 이전에는 Java 프로그래밍 언어가 배열, 벡터 또는 해시 테이블과 같은 데이터 구조를 지원했습니다. 이러한 데이터 구조에서 작동하는 공통 인터페이스가 없었기 때문에 이러한 데이터 구조에 대한 작업을 수행하는 것은 쉽지 않았습니다.
프로그래머들은 모든 데이터 구조에서 작동하는 알고리즘을 작성하는 것이 어려웠고 큰 번거 로움을 느꼈습니다. 모든 데이터 구조에서 일관되게 작동하고 작업을 효율적으로 수행하는 공통 인터페이스가 필요했습니다.
나중에 Java는 데이터 구조에서 수행 할 수있는 다양한 작업으로 구성된 클래스 및 인터페이스 그룹 인 컬렉션 프레임 워크를 내놓았습니다.
이 Java Collections Tutorial에서는 일반적인 Java Collections Framework에 대해 설명합니다. 향후 튜토리얼에서 각 컬렉션 구성 요소를 살펴 보겠습니다.
자바 컬렉션 프레임 워크
Java Collections Framework를 정의하기 전에 컬렉션과 프레임 워크의 의미를 알아 봅시다.
컬렉션은 개체 그룹으로 정의 할 수 있습니다. 컬렉션은 일반적으로 둘 이상의 개체로 구성된 단일 단위입니다. 프레임 워크는 기성 기능 인터페이스 또는 아키텍처가있는 소프트웨어이며 제공된 인터페이스와 함께 사용할 클래스 및 인터페이스 세트도 포함합니다.
컬렉션 프레임 워크는 아래와 같이 구성된 통합 된 기성 아키텍처로 정의됩니다.
# 1) 알고리즘
이는 프로그래머가 수집 된 데이터를 검색, 정렬 및 처리하는 데 도움을 줄 수있는 방법 또는 명령문 집합입니다. 컬렉션은 인터페이스, 클래스 및 알고리즘과 함께 패키지로 제공됩니다.
컬렉션 프레임 워크를 상속하여 개발 된 응용 프로그램은 이러한 알고리즘에 액세스 할 수 있으며 이미 정의 된 방법 및 절차를 사용합니다.
# 2) 인터페이스
Java의 인터페이스는 구현의 추상화를 제공합니다. 즉, 인터페이스를 사용하여 사용자는 구현의 세부 사항을 알지 못하지만 응용 프로그램을 작성하는 데 필요한 메서드와 데이터 만 볼 수 있습니다. 컬렉션 인터페이스에는 프로그래머가 자체 클래스를 작성하기 위해 구현할 수있는 많은 인터페이스가 있습니다.
# 3) 수업
Collection Framework의 클래스는 프로그램에서 구현할 수있는 데이터 구조입니다. 이러한 클래스는 'Collection'인터페이스를 구현하므로 컬렉션 인터페이스의 모든 메서드와 정의를 상속합니다.
컬렉션 프레임 워크는 개체 그룹 인 컬렉션을 저장하고 조작하는 데 사용됩니다.
Java 컬렉션 프레임 워크는 검색, 정렬 및 처리와 같은 표준 작업을 수행하는 고성능 알고리즘으로 구성됩니다. 인터페이스가 제공되는 LinkedList, TreeSet, HashSet 등 다양한 표준 구현을 제공합니다.
다음으로 Java Collection Hierarchy를 이해하겠습니다.
Java 컬렉션 계층
아래 Java Collection 계층 구조에 표시된 모든 클래스와 인터페이스는“java.util. *”패키지에 속합니다.
위의 다이어그램에서 볼 수 있듯이 Java Collection Hierarchy는 다양한 클래스와 인터페이스로 구성됩니다. 보시다시피 각 클래스는 인터페이스에서 상속되고 모든 클래스 및 인터페이스는 단일 '컬렉션'인터페이스에서 상속됩니다.
위의 계층 구조에 표시된 각 클래스 및 인터페이스에 대한 간략한 소개와 함께 컬렉션 인터페이스의 몇 가지 일반적인 메서드에 대해 설명하겠습니다.
컬렉션 인터페이스
Collection 인터페이스는 루트 인터페이스입니다. 컬렉션 프레임 워크의 모든 클래스는 컬렉션 인터페이스를 구현합니다. 즉, 모든 컬렉션에는 컬렉션 인터페이스에서 선언 된 메서드가 있습니다.
Collection 인터페이스의 일부 메소드는 다음과 같습니다.
하지 마라 | 방법 프로토 타입 | 기술 |
---|---|---|
7 | 기본 부울 removeIf (조건부 필터) | 콜렉션에서 주어진 술어 'filter'를 충족하는 모든 요소를 제거하십시오. |
1 | public int size () | 지정된 컬렉션의 요소 수를 반환합니다. |
두 | public void clear () | 컬렉션에서 모든 요소를 제거하여 컬렉션을 지 웁니다. |
삼 | 공개 부울 add (E e) | 컬렉션에 요소 e를 삽입합니다. |
4 | public booleanaddAll (컬렉션 c) | c로 주어진 컬렉션의 모든 요소를 컬렉션에 삽입합니다. |
5 | 공용 부울 제거 (개체 요소) | 컬렉션에서 'element'가 지정한 요소를 삭제합니다. |
6 | public boolean removeAll (Collectionc) | 컬렉션에서 컬렉션 c를 제거합니다. |
8 | public booleanretainAll (컬렉션 c) | 컬렉션에서 지정된 컬렉션의 요소를 제외한 모든 요소를 삭제합니다. c. |
9 | 공용 반복기 iterator () | 컬렉션에 대한 반복기를 반환합니다. |
10 | 공용 Object () toArray () | 컬렉션을 배열로 변환합니다. |
열한 | 공개 T () toArray (T () a) | 컬렉션을 지정된 반환 유형이있는 배열로 변환합니다. |
12 | 공개 부울 isEmpty () | 컬렉션이 비어 있는지 여부를 반환합니다. |
13 | public boolean contains (Object element) | 컬렉션에 지정된 요소가 포함되어 있는지 확인합니다 (검색 작업). |
14 | public booleancontainsAll (Collectionc) | 컬렉션에 지정된 컬렉션 c가 포함되어 있는지 확인합니다. |
열 다섯 | 기본 Spliterator spliterator () | 지정된 컬렉션에 대한 분할자를 반환합니다. |
16 | public booleanequals (Object 요소) | 두 컬렉션을 일치시키는 데 사용됩니다. |
17 | 기본 스트림 parallelStream () | 컬렉션을 소스로 사용하여 병렬 스트림을 반환합니다. |
18 | 기본 Streamstream () | 컬렉션을 소스로 사용하여 순차 스트림을 반환합니다. |
19 | public int hashCode () | 컬렉션의 숫자 해시 코드를 반환합니다. |
반복 가능한 인터페이스
Iterable 인터페이스는 컬렉션 프레임 워크의 기본 인터페이스이기도합니다. 다른 모든 클래스의 부모 인터페이스 인 Collection 인터페이스는 Iterable 인터페이스를 확장합니다. 따라서 모든 클래스는 컬렉션 인터페이스와 Iterable 인터페이스를 구현합니다.
Iterable 인터페이스에는 T 유형의 요소를 반복하는 데 사용할 수있는 반복기 ()를 반환하는 메서드 반복기 ()가 하나만 있습니다.
Iterator iterator ()
반복자 인터페이스
Iterator 인터페이스는 순방향으로 요소를 반복하는 기능을 제공합니다.
다음은이 인터페이스에서 지원하는 메소드입니다.
하지 마라 | 방법 프로토 타입 | 기술 |
---|---|---|
1 | 공용 객체 next () | 먼저 요소를 반환 한 다음 커서를 다음 요소를 가리 키도록 이동합니다. |
두 | 공개 부울 hasNext () | 반복기에 더 많은 요소가 있는지 확인합니다. |
삼 | public void remove () | 끝에서 반복기에 의해 반환되는 요소를 제거합니다. |
목록 인터페이스
목록 인터페이스는 컬렉션 인터페이스를 상속합니다. 목록 인터페이스에는 정렬 된 데이터 또는 개체 컬렉션을 저장하는 데 사용되는 데이터 구조가 포함되어 있습니다. 이러한 데이터 구조는 목록 유형입니다. 목록 인터페이스를 구현하는 이러한 데이터 구조에는 중복 값이있을 수도 있고 없을 수도 있습니다.
목록 인터페이스에는 목록 개체에서 요소를 액세스, 삽입 또는 제거하는 데 사용되는 메서드가 포함되어 있습니다.
List 인터페이스를 구현하는 다양한 클래스는 다음과 같습니다.
수동 테스트 케이스 작성 방법
- ArrayList
- LinkedList
- 벡터
- 스택
각 수업에 대해 간략하게 설명하겠습니다. 이후 주제에서는 각 컬렉션 프레임 워크 클래스에 대해 자세히 설명합니다.
# 1) 배열 목록
ArrayList는 List 인터페이스의 가장 간단한 구현입니다. ArrayList는 삽입 순서를 유지하며 동기화되지 않습니다.
ArrayList 데이터 구조 (콜렉션)의 일반적인 정의는 다음과 같습니다.
List list1= new ArrayList ();
목록이 정의되면 'add'메소드를 사용하여 요소를 추가 할 수 있습니다. 내부적으로 ArrayList는 동적 배열 메커니즘을 사용했습니다.
색상의 ArrayList 컬렉션을 만드는 다음 예제를 참조하십시오.
import java.util.*; class Main { public static void main(String args()) { //Creating arraylist of String objects ArrayList color_list=new ArrayList(); //populate the arraylist with add method color_list.add('Red'); color_list.add('Green'); color_list.add('Blue'); color_list.add('Cyan'); color_list.add('Magenta'); color_list.add('Yellow'); //Traverse the list through Iterator Iterator itr=color_list.iterator(); System.out.println('The contents of the arraylist are:'); while(itr.hasNext()){ System.out.println(itr.next()); } } }
산출:
위 프로그램은 ArrayList 컬렉션의 데모를 보여줍니다. 컬렉션에 색상 값을 추가 한 다음 컬렉션을 순회하여 반복기를 사용하여 컬렉션의 개별 값을 표시합니다.
# 2) 링크드리스트
LinkedList 컬렉션은 내부적으로 요소를 저장하기 위해 이중 연결 목록 메커니즘을 사용합니다. 중복 요소를 포함 할 수 있습니다. LinkedList 컬렉션 작업은 요소 이동이 필요하지 않으므로 더 빠릅니다.
연결 목록을 만드는 일반적인 정의는 다음과 같습니다.
List list2 = new LinkedList ();
다음 프로그램은 번호 이름의 연결 목록 모음 .
import java.util.*; class Main { public static void main(String args()) { //linked list of String objects LinkedList linkedlist_num=new LinkedList(); linkedlist_num.add('one'); linkedlist_num.add('two'); linkedlist_num.add('three'); linkedlist_num.add('four'); linkedlist_num.add('five'); //iterate over the linked list to display contents Iterator itr=linkedlist_num.iterator(); System.out.println('The contents of the linked list are:'); while(itr.hasNext()) { System.out.println(itr.next()); } } }
산출:
따라서 연결 목록을 만든 다음 'add'메서드를 사용하여 요소를 추가합니다. 그런 다음 반복기를 사용하여 연결 목록을 탐색하고 각 요소를 표시합니다.
# 3) 벡터
Vector는 ArrayList와 유사하며 동적 배열을 사용하여 ArrayList와 같은 요소를 저장합니다. 그러나 벡터는 컬렉션과는 별도로 많은 독립적 인 방법을 지원하므로 선호하는 컬렉션이되는 것이 더 나은 선택입니다.
벡터 수집의 일반적인 정의는 다음과 같습니다.
List list3 = new Vector();
vector와 ArrayList는 동일한 동적 배열 메커니즘을 사용하지만 벡터 요소는 동기화됩니다.
아래에 제공된 Java 프로그램은 컬렉션 프레임 워크에서 벡터 사용을 보여줍니다. .
import java.util.*; public class Main { public static void main(String args()) { Vector subject_vector=new Vector(); subject_vector.add('English'); subject_vector.add('Hindi'); subject_vector.add('Maths'); subject_vector.add('Science'); Iterator itr=subject_vector.iterator(); System.out.println('Vector contents:'); while(itr.hasNext()) { System.out.println(itr.next()); } } }
산출:
이 프로그램에서 우리는 주제로 구성된 벡터 컬렉션을 정의했습니다. 다양한 주제를 추가 한 다음 반복기를 사용하여 요소를 출력합니다.
# 4) 스택
스택 데이터 구조는 요소를 삽입하는 후입 선출 (LIFO) 방식을 구현합니다. 스택은 클래스 벡터의 하위 클래스입니다 (위의 컬렉션 계층 다이어그램 참조). 자체 메서드 외에도 스택 컬렉션은 벡터 컬렉션 메서드도 지원합니다.
스택 컬렉션의 일반적인 정의는 다음과 같습니다.
List list4 = new Stack();
다음 프로그램 스택 컬렉션 구현 .
import java.util.*; public class Main { public static void main(String args()) { Stack even_stack = new Stack (); even_stack.push(2); even_stack.push(4); even_stack.push(6); even_stack.push(8); even_stack.push(10); System.out.println('The element removed from stack: ' + even_stack.pop()); Iterator itr=even_stack.iterator(); System.out.println('The contents of the stack are:'); while(itr.hasNext()) { System.out.print(itr.next() + ' '); } } }
산출:
위의 구현에서 볼 수 있듯이 새 요소는 다음을 사용하여 스택에 추가됩니다. '푸시' 조작. 스택에는 'Top of the stack'이라는 단일 진입 점이 있으며 요소는 맨 위에있는 스택으로 푸시됩니다. 따라서 추가 된 마지막 요소는 스택의 맨 위에 있습니다.
추가와 마찬가지로 요소도 스택의 한 쪽 끝에서 제거됩니다. 요소를 제거하기 위해 '팝'연산이 사용됩니다. 따라서 pop ()을 호출하면 스택 맨 위에있는 요소가 제거됩니다.
위의 출력에서 2, 4, 6,8,10 요소를 삽입 한 다음 pop ()을 호출하여 10을 제거합니다.
대기열 인터페이스
큐 인터페이스에서 파생 된 컬렉션은 선입 선출 (FIFO) 순서를 따릅니다. 요소는 한쪽 끝에 삽입되고 다른 쪽 끝에서 제거됩니다. 따라서 처음 입력 된 요소는 먼저 제거되는 요소가됩니다.
다음은 쿼리 인터페이스를 지원하는 컬렉션입니다.
- PriorityQueue
- 및 인터페이스
- ArrayDeque
각각에 대해 간략하게 설명하겠습니다.
# 1) PriorityQueue
PriorityQueue 컬렉션에서 저장된 요소는 우선 순위에 따라 처리됩니다. 우선 순위 대기열에 null 값을 저장할 수 없습니다.
우선 순위 대기열의 일반적인 정의는 다음과 같습니다.
Queue q1 = new PriorityQueue();
아래 프로그램은 우선 순위 대기열을 구현합니다.
import java.util.*; public class Main { public static void main(String args()) { PriorityQueue color_queue=new PriorityQueue(); color_queue.add('red'); color_queue.add('green'); color_queue.add('blue'); color_queue.add('cyan'); color_queue.add('magenta'); color_queue.add('yellow'); System.out.println('Priority Queue elements:'); System.out.println('head:'+color_queue.peek()); System.out.println('Other elements in Priority Queue:'); Iterator itr=color_queue.iterator(); while(itr.hasNext()) { System.out.print(itr.next() + ' '); } System.out.println('
'); color_queue.remove(); System.out.println('After removing element, new head:'+color_queue.element()); System.out.println('
'); color_queue.poll(); System.out.println('After removing another element, Priority Queue :'); Iterator itr2=color_queue.iterator(); while(itr2.hasNext()) { System.out.print(itr2.next() + ' '); } } }
산출:
다시 한번 우리는 우선 순위 대기열의 요소로 색상을 사용합니다. 위의 프로그램에서 우리는 큐에 요소를 추가하고 요소를 제거하기 위해 add와 remove 메소드를 사용했습니다. 우선 순위 대기열에서 가리키는 요소를 반환하는 peek () 메서드를 사용합니다.
마지막으로 반복자를 사용하여 우선 순위 큐의 요소가 표시됩니다.
# 2) 터치 인터페이스
Deque 또는 'double-ended queue'는 양쪽 끝에서 요소를 추가하고 제거 할 수있는 데이터 구조입니다. Queue 인터페이스를 확장하는 Java 컬렉션 프레임 워크의 deque 인터페이스입니다.
그것은 deque의 기능을 제공하고 그것으로부터 상속받은 'ArrayDeque'클래스를 가지고 있습니다.
# 3) ArrayDeque
ArrayDeque는 deque 인터페이스를 구현합니다.
ArrayDeque의 일반적인 정의는 다음과 같습니다.
Deque d = new ArrayDeque();
ArrayDeque를 사용하면 Deque의 기능을 사용할 수 있습니다. ArrayList 또는 스택과 같은 다른 컬렉션과 달리 ArrayDeque는 용량에 제한이 없습니다.
다음 예제는 ArrayDeque의 구현을 보여줍니다.
import java.util.*; public class Main { public static void main(String() args) { //Creating Deque and adding elements Deque deque = new ArrayDeque (); deque.add(10); deque.add(20); deque.add(30); System.out.println('Deque Elements:'); //Traversing elements for (Integer num : deque) { System.out.println(num); } } }
산출:
위의 프로그램에서 정수 유형의 ArrayDeque 컬렉션을 정의하고 add 메서드를 사용하여 정수 요소를 추가합니다. 그런 다음 for 구성을 사용하여 컬렉션을 순회합니다.
인터페이스 설정
set 인터페이스는 java.util 패키지의 일부이며 컬렉션 인터페이스에서 확장됩니다. 집합은 컬렉션에 중복 값과 둘 이상의 null 값을 허용하지 않는 구조입니다.
다음 클래스는 set 인터페이스를 구현합니다.
- HashSet
- LinkedHashSet
- TreeSet
# 1) HashSet
Set 인터페이스를 구현하는 HashSet 컬렉션에는 고유 한 값이 저장되어 있습니다. 이 컬렉션은 해싱 기술을 사용하여 항목을 저장하고 해시 테이블을 요소 저장에 사용합니다.
티 HashSet 컬렉션의 일반적인 정의는 다음과 같습니다.
Set s1 = new HashSet();
다음 프로그램에서 HashSet 구현을 제공했습니다.
import java.util.*; public class Main { public static void main(String args()) { //Create HashSet set_subjects HashSet set_subjects=new HashSet(); System.out.println('Elements in the given hashsetset_subjects are:'); set_subjects.add('Maths'); set_subjects.add('Computers'); set_subjects.add('English'); set_subjects.add('French'); //Traverse the hashset Iterator itr=set_subjects.iterator(); while(itr.hasNext()) { System.out.println(itr.next()); } } }
산출:
위의 프로그램에서 우리는 주제의 HashSet 컬렉션을 만든 다음 컬렉션의 요소를 표시하기 위해 반복기를 사용하여 탐색합니다.
# 2) LinkedHashSet
LinkedHashSet은 집합 인터페이스를 구현하고 HashSet (컬렉션 계층 참조)을 확장합니다. LinkedHashSet은 인터페이스 Set의 연결 목록 표현입니다. LinkedHashSet은 고유 한 요소를 포함하지만 널값을 허용합니다.
LinkedHashSet의 일반적인 정의는 다음과 같습니다.
Set s2 = new LinkedHashSet();
LinkedHashSet의 구현은 다음과 같습니다.
import java.util.*; public class Main { public static void main(String args()) { LinkedHashSet set_subjects=new LinkedHashSet(); System.out.println('Elements in the LinkedHashSet set_subjects:'); set_subjects.add('Maths'); set_subjects.add('Computers'); set_subjects.add('English'); set_subjects.add('Sanskrit'); Iterator itr=set_subjects.iterator(); while(itr.hasNext()) { System.out.println(itr.next()); } } }
산출:
다시 한번 우리는 Linkedhashset을 만들기 위해 책 제목을 사용합니다. 출력에서 볼 수 있듯이 추가 순서는 linkedHashSet에 의해 유지됩니다.
SortedSet 인터페이스
SortedSet 인터페이스는 요소의 완전한 순서를 허용합니다. 요소의 자연스러운 순서를 제공하는 메서드가 포함되어 있습니다. SortedSet 인터페이스를 구현하는 컬렉션의 요소는 오름차순으로 정렬됩니다.
TreeSet 클래스는 SortedSet 인터페이스를 구현하는 예제 중 하나입니다.
트리 셋
Treeset의 일반적인 정의는 다음과 같습니다.
Set s3 = new TreeSet();
TreeSet은 SortedSet 인터페이스를 구현하고 고유 한 요소를 포함합니다. 저장 및 검색이 매우 빠르며 요소가 오름차순으로 정렬됩니다.
import java.util.*; public class Main{ public static void main(String args()) { //create a treeset of integers TreeSet set_oddnums=new TreeSet (); set_oddnums.add(1); set_oddnums.add(3); set_oddnums.add(5); set_oddnums.add(7); set_oddnums.add(9); System.out.println('Elements in TreeSet are:'); //traverse the treeset using iterator Iterator itr=set_oddnums.iterator(); while(itr.hasNext()) { System.out.print(itr.next() + ' '); } } }
산출:
플로우 차트를 만드는 최고의 소프트웨어
위의 프로그램에서 우리는 add 메서드를 사용하여 컬렉션에 홀수를 만들고 추가했습니다. 그런 다음 반복기를 사용하여 컬렉션의 요소를 출력합니다.
Java Collections Framework의 장점
- 감소 된 프로그래밍 : Collections 프레임 워크는 프로그래머가 효율적인 프로그램을 작성할 수 있도록하는 메서드를 포함하는 모든 인터페이스 및 클래스와 함께 제공됩니다. 이렇게하면 프로그래머는 너무 많은 프로그래밍에 집중할 필요가 없습니다.
- 일관된 메서드 및 API : 모든 클래스에는 데이터에 대해 작동하는 공통 메서드가 있습니다. 이러한 API는 클래스 전체에서 일관되며 프로그래머는 각 클래스에 대해 너무 많은 다른 메서드를 갖는 것에 대해 걱정할 필요가 없습니다.
- 속도 및 정확도 향상 : 컬렉션 프레임 워크를 사용하여 매우 효율적인 프로그램을 작성할 수 있으며 컬렉션 프레임 워크가 데이터 구조 및 컬렉션을 구현하는 모든 기능을 제공하므로 더 빠르고 정확한 프로그램을 작성할 수 있습니다.
- 소프트웨어 재사용 촉진 : Java 컬렉션 프레임 워크의 데이터 구조와 알고리즘은 재사용이 가능합니다.
- 관련없는 API 간의 상호 운용성 : 컬렉션 API는 관련없는 API 간에도 상호 운용성을 허용합니다.
- 새로운 API를 설계하려는 노력 감소 : 프로그래머는 표준 컬렉션 API를 사용하고이를 기반으로 새로운 API를 설계 할 수 있습니다. 완전히 새로운 API를 작성하기 위해 고군분투 할 필요가 없습니다.
자주 묻는 질문
# 1) Java에서 수집 프레임 워크를 사용하는 것은 무엇입니까?
대답: 컬렉션 프레임 워크는 프로그래머가 데이터를 저장하고 처리 할 수있는 매우 효율적인 프로그램을 작성할 수 있도록 사전 패키지 된 알고리즘, 인터페이스 및 클래스를 제공합니다.
# 2) 컬렉션이 프레임 워크 인 이유는 무엇입니까?
대답: 프레임 워크는 재사용 가능한 클래스, 인터페이스 및 알고리즘 모음입니다. 컬렉션 프레임 워크는 또한 이러한 클래스에서 작동하는 데이터 구조 클래스 및 알고리즘의 재사용 가능한 컬렉션입니다.
# 3) Java에서 Java Collections API는 무엇입니까?
대답: Java 컬렉션 API는 컬렉션에 불과한 데이터 구조를 사용하기 위해 확장 및 구현할 수있는 인터페이스와 클래스를 제공합니다.
# 4) Java에서 컬렉션과 컬렉션의 차이점은 무엇입니까?
대답: 컬렉션은 컬렉션 프레임 워크의 기본 인터페이스이며 '컬렉션'은 클래스입니다. 둘 다 java.util 패키지의 일부입니다.
**** Java Collections Framework에 대한 자세한 내용과 예 : ****
목록, 세트 및 대기열 비교 :
명부 | 세트 | 열 |
---|---|---|
게재 신청서가 유지됩니다. | 해시 세트에서 삽입 순서가 유지되지 않습니다. | 게재 신청서가 유지됩니다. |
중복 요소를 포함 할 수 있습니다. | 중복 요소를 포함 할 수 없습니다. | 중복 요소를 포함 할 수 있습니다. |
모든 인덱스에 대해 배열 삽입 및 제거를 수행 할 수 있습니다. | 지정된 요소를 제거하십시오. | 마지막으로 삽입 된 요소 만 튀어 나올 수 있습니다. 또한 요소 삽입은 끝에 발생합니다. |
배열 목록 클래스
Array에서는 메모리 할당이 고정됩니다. 그러나 ArrayList에서는 메모리를 동적으로 할당 할 수 있습니다. 이 ArrayList 클래스는 삽입 순서를 유지하며 중복 요소를 삽입 할 수 있습니다.
어레이 목록 용 데모 프로그램 :
public class ArrayListDemo { public static void main(String() args) { ArrayList li = new ArrayList (); li.add(1); li.add(2); li.add(3); li.remove(0); for (Integer temp : li) { System.out.println(temp); } System.out.println('=========='); ArrayList l = new ArrayList(); l.add('text1'); l.add('text2'); l.add('text3'); for (String temp : l) { System.out.println(temp); } System.out.println('=========='); ArrayList al=new ArrayList(); al.add(1); al.add(2); al.forEach((a)->;System.out.println(a)); } }
LinkedList 클래스
연결된 목록 데이터 구조에는 노드가 포함되며이 노드에는 두 부분이 포함됩니다.
- 데이터
- 다음 요소에 대한 참조
첫 번째 노드는 별도의 노드가 아닙니다. 참조 만 포함하고 헤드라고합니다. 마지막 노드는 null입니다.
데모 프로그램 :
public class LinkedListDemo { public static void main(String() args) { LinkedList list =new LinkedList(); list.add(22); list.add(44); list.add(46); list.add(46); list.add(46); for(Integer temp:list) { System.out.println(temp); } Iterator it =list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } System.out.println('=========='); for (int i=0;i
열
큐는 선입 선출 (FIFO) 데이터 구조입니다. remove 메서드를 호출하면 항상 첫 번째로 삽입 된 요소가 큐에서 제거됩니다. 따라서 Queue는 삽입 된 순서대로 데이터를 검색해야하는 실시간 애플리케이션에서 사용됩니다.
예제 프로그램 :
public class QueueDemo { public static void main(String() args) { PriorityQueue pq=new PriorityQueue(); pq.add(1); pq.add(2); pq.add(3); pq.add(4); pq.add(5); pq.add(6); pq.add(7); for(int temp : pq) { System.out.println(temp); } pq.remove(); System.out.println('queue after removing a element'); System.out.println(pq); } }
세트
집합 컬렉션은 중복 요소를 허용하지 않습니다. 중복없이 데이터 수집을 처리하고 삽입 순서를 유지할 필요가없는 경우 집합 데이터 구조를 사용할 수 있습니다.
데모 프로그램 :
public class demohashset { public static void main (String() args){ HashSet hs=new HashSet(); hs.add(23); hs.add(24); hs.add(25); hs.add(26); hs.add(27); hs.add(28); hs.add(293); hs.add(203); hs.add(263); hs.add(243); hs.add(243); (int temp:hs) { System.out.println(temp); } hs.remove(24); hs.remove(23); System.out.println('==============='); System.out.println('after removing a element ::::'); System.out.println('==============='); hs.forEach((temp)->System.out.println(temp)); ; } }
MAP 인터페이스
- 키와 값 쌍이있는 요소의 수집을 처리하려면 맵이 키를 값에 매핑 할 수있는 객체이므로 맵 데이터 구조를 사용할 수 있습니다.
- 맵은 중복 키를 포함 할 수 없습니다.
- 지도의 중요한 구현은 HashMap, Treemap, LinkedHashMap, HashTable입니다.
HashMap, Treemap, LinkedHashMap 및 HashTable의 차이점 :
HashMap TreeMap LinkedHashmap HashTable Null 키와 값이 허용됩니다. null 값만 허용됩니다. Null 키 및 값이 허용됩니다. null 키와 값은 허용되지 않습니다. 동기화되지 않음 동기화되지 않음 동기화되지 않음 동기화 됨 반복에서 순서를 유지한다는 보장이 없습니다. 자연 순서에 따라 정렬됩니다. 게재 신청서가 유지됩니다. 게재 신청서가 유지되지 않습니다.
데모 프로그램 :
public class HashMapDemo { public static void main(String() args) { HashMap m=new HashMap(); m.put(1, 'one'); m.put(2, 'two'); m.put(3, 'three'); m.put(4, 'four'); m.put(null, 'one'); m.put(null, null); System.out.println(m); TreeMap tm =new TreeMap(); tm.put('R', 'red'); tm.put('B', null); tm.put('G', 'green'); System.out.println(tm); Hashtable ht =new Hashtable(); ht.put(1, 'one'); ht.put(2, 'two'); ht.put(3, 'three'); ht.put(4, 'four'); System.out.println(ht); } }
주목해야 할 요점 :
- List, Queue, set 인터페이스는 컬렉션 인터페이스를 확장하며이 컬렉션 인터페이스에는 추가, 제거 등과 같은 일반적인 메서드가 있습니다.
- 삽입 순서는 목록에서 유지되며 세트는 중복 요소를 포함 할 수 없습니다. 대기열은 선입 선출 데이터 구조입니다.
- 맵에는 키 및 값 쌍이 포함됩니다. HashMap, Treemap, Hashtable, Linked HashMap은 맵 인터페이스의 중요한 구현입니다.
결론
이 튜토리얼은 우리에게 Java Collections Framework를 소개했습니다. Java 컬렉션 프레임 워크의 일부인 모든 클래스와 인터페이스에 대해 간략히 설명했습니다.
이 시리즈의 후속 자습서에서는 이러한 각 클래스 및 인터페이스에 대해 자세히 알아 봅니다.
앞으로 나올 튜토리얼에서 JAVA의 Reflections에 대해 자세히 알아볼 수 있습니다 !!!
추천 도서