단일 단위로 표시되는 개별 객체 그룹을 Java 객체 컬렉션이라고 합니다. Java에서는 별도의 프레임워크인 수집 프레임워크 모든 Java 컬렉션 클래스와 인터페이스를 보유하는 JDK 1.2에 정의되었습니다.
Java에서는 Collection 인터페이스( java.util.Collection ) 및 지도 인터페이스( java.util.Map )은 Java 컬렉션 클래스의 두 가지 주요 루트 인터페이스입니다.
Java 컬렉션에서 무엇을 배워야 할까요?
- 목록 인터페이스
- 추상 목록 클래스
- 추상 순차 목록 클래스
- 배열 목록
- 벡터 클래스
- 스택 클래스
- 링크드리스트 클래스
- 대기열 인터페이스
- 차단 대기열 인터페이스
- AbstractQueue 클래스
- PriorityQueue 클래스
- PriorityBlockingQueue 클래스
- ConcurrentLinkedQueue 클래스
- ArrayBlockingQueue 클래스
- DelayQueue 클래스
- LinkedBlockingQueue 클래스
- 연결된 전송 대기열
- 그리고 인터페이스
- BlockingDeque 인터페이스
- ConcurrentLinkedDeque 클래스
- ArrayDeque 클래스
- 인터페이스 설정
- 추상 집합 클래스
- CopyOnWriteArraySet 클래스
- EnumSet 클래스
- ConcurrentHashMap 클래스
- HashSet 클래스
- LinkedHashSet 클래스
- SortedSet 인터페이스
- NavigableSet 인터페이스
- 트리세트
- ConcurrentSkipListSet 클래스
- 지도 인터페이스
- 기타 중요한 개념
- HashMap을 ArrayList로 변환하는 방법
- 목록에서 항목을 무작위로 선택
- 컬렉션의 모든 항목을 ArrayList에 추가하는 방법
- Java 맵을 목록으로 변환
- 배열을 ArrayList로 변환
- ArrayList를 배열로 변환
- Array와 ArrayList의 차이점
Java의 프레임워크란 무엇입니까?
프레임워크는 미리 만들어진 아키텍처를 제공하는 클래스와 인터페이스의 집합입니다. 새로운 기능이나 클래스를 구현하기 위해 프레임워크를 정의할 필요가 없습니다. 그러나 최적의 객체 지향 디자인에는 항상 모든 클래스가 동일한 종류의 작업을 수행하도록 클래스 컬렉션이 있는 프레임워크가 포함됩니다.
Java에서 별도의 수집 프레임워크가 필요함
Collection Framework(또는 JDK 1.2)가 도입되기 전, Java 객체(또는 컬렉션)를 그룹화하는 표준 방법은 다음과 같습니다. 배열 또는 벡터 , 또는 해시테이블 . 이러한 컬렉션에는 모두 공통 인터페이스가 없었습니다. 따라서 모든 컬렉션의 주요 목적은 동일하지만 이러한 모든 컬렉션의 구현은 독립적으로 정의되었으며 컬렉션 간의 상관 관계가 없습니다. 또한 사용자가 서로 다른 모든 내용을 기억하는 것도 매우 어렵습니다. 행동 양식 , 구문 및 생성자 모든 컬렉션 클래스에 존재합니다.
해시테이블과 벡터에 요소를 추가하는 예를 통해 이를 이해해 보겠습니다.
예:
자바
// Java program to demonstrate> // why collection framework was needed> import> java.io.*;> import> java.util.*;> class> CollectionDemo {> > public> static> void> main(String[] args)> > {> > // Creating instances of the array,> > // vector and hashtable> > int> arr[] => new> int> [] {> 1> ,> 2> ,> 3> ,> 4> };> > Vector v => new> Vector();> > Hashtable h => new> Hashtable();> > // Adding the elements into the> > // vector> > v.addElement(> 1> );> > v.addElement(> 2> );> > // Adding the element into the> > // hashtable> > h.put(> 1> ,> 'geeks'> );> > h.put(> 2> ,> '4geeks'> );> > // Array instance creation requires [],> > // while Vector and hastable require ()> > // Vector element insertion requires addElement(),> > // but hashtable element insertion requires put()> > // Accessing the first element of the> > // array, vector and hashtable> > System.out.println(arr[> 0> ]);> > System.out.println(v.elementAt(> 0> ));> > System.out.println(h.get(> 1> ));> > // Array elements are accessed using [],> > // vector elements using elementAt()> > // and hashtable elements using get()> > }> }> |
>
>산출
1 1 geeks>
관찰할 수 있듯이 이러한 컬렉션(Array, Vector 또는 Hashtable) 중 어느 것도 표준 멤버 액세스 인터페이스를 구현하지 않으므로 프로그래머가 모든 종류의 컬렉션에 대해 작동할 수 있는 알고리즘을 작성하는 것이 매우 어려웠습니다. 또 다른 단점은 대부분의 'Vector' 메소드가 최종 메소드라는 것입니다. 즉, 유사한 종류의 Collection을 구현하기 위해 'Vector' 클래스를 확장할 수 없다는 의미입니다. 따라서 Java 개발자는 위에서 언급한 문제를 처리하기 위해 공통 인터페이스를 고안하기로 결정하고 JDK 1.2 게시물에 컬렉션 프레임워크를 도입했으며 레거시 벡터와 해시테이블을 모두 컬렉션 프레임워크에 맞게 수정했습니다.
Java 컬렉션 프레임워크의 장점
컬렉션 프레임워크의 부족으로 인해 위와 같은 일련의 단점이 발생하므로 컬렉션 프레임워크의 장점은 다음과 같습니다.
- 일관된 API: API에는 다음과 같은 기본 인터페이스 세트가 있습니다. 수집 , 세트 , 목록 , 또는 지도 , 이러한 인터페이스를 구현하는 모든 클래스(ArrayList, LinkedList, Vector 등)에는 일부 일반적인 방법 세트.
- 프로그래밍 노력 감소: 프로그래머는 컬렉션의 디자인에 대해 걱정할 필요가 없으며 오히려 자신의 프로그램에서 컬렉션을 최대한 활용하는 데 집중할 수 있습니다. 따라서 객체지향 프로그래밍(즉, 추상화)의 기본 개념이 성공적으로 구현되었습니다.
- 프로그램 속도와 품질 향상: 유용한 데이터 구조 및 알고리즘의 고성능 구현을 제공하여 성능을 향상시킵니다. 이 경우 프로그래머는 특정 데이터 구조의 최상의 구현을 생각할 필요가 없기 때문입니다. 그는 최고의 구현을 사용하여 알고리즘/프로그램의 성능을 대폭 향상시킬 수 있습니다.
Java의 컬렉션 프레임워크 계층 구조
유틸리티 패키지(java.util)에는 컬렉션 프레임워크에 필요한 모든 클래스와 인터페이스가 포함되어 있습니다. 컬렉션 프레임워크에는 모든 컬렉션을 반복하는 반복자를 제공하는 반복 가능 인터페이스라는 인터페이스가 포함되어 있습니다. 이 인터페이스는 컬렉션 프레임워크의 루트 역할을 하는 기본 컬렉션 인터페이스에 의해 확장됩니다. 모든 컬렉션은 이 컬렉션 인터페이스를 확장하여 반복자의 속성과 이 인터페이스의 메서드를 확장합니다. 다음 그림은 컬렉션 프레임워크의 계층 구조를 보여줍니다.
위 프레임워크의 다양한 구성요소를 이해하기 전에 먼저 클래스와 인터페이스를 이해해 보겠습니다.
- 수업 : 클래스는 객체가 생성되는 사용자 정의 청사진 또는 프로토타입입니다. 이는 한 유형의 모든 개체에 공통된 속성 또는 메서드 집합을 나타냅니다.
- 상호 작용 : 클래스와 마찬가지로 인터페이스에도 메서드와 변수가 있을 수 있지만 인터페이스에 선언된 메서드는 기본적으로 추상입니다(메서드 시그니처만 있고 아무도 없음). 인터페이스는 클래스가 수행해야 하는 작업과 수행 방법을 지정하지 않습니다. 수업의 청사진입니다.
컬렉션 인터페이스의 방법
이 인터페이스에는 이 인터페이스를 구현하는 모든 컬렉션에서 직접 사용할 수 있는 다양한 메서드가 포함되어 있습니다. 그들은:
방법 | 설명 |
---|---|
추가(객체) | 이 메서드는 컬렉션에 개체를 추가하는 데 사용됩니다. |
addAll(컬렉션 c) | 이 메소드는 지정된 컬렉션의 모든 요소를 이 컬렉션에 추가합니다. |
분명한() | 이 메서드는 이 컬렉션에서 모든 요소를 제거합니다. |
포함(객체 o) | 컬렉션에 지정된 요소가 포함되어 있으면 이 메서드는 true를 반환합니다. |
containAll(컬렉션 c) | 컬렉션에 지정된 컬렉션의 모든 요소가 포함되어 있으면 이 메서드는 true를 반환합니다. |
같음(객체 o) | 이 메서드는 지정된 개체가 이 컬렉션과 동일한지 비교합니다. |
해시 코드() | 이 메소드는 이 컬렉션에 대한 해시 코드 값을 반환하는 데 사용됩니다. |
비었다() | 이 컬렉션에 요소가 없으면 이 메서드는 true를 반환합니다. |
반복자() | 이 메서드는 이 컬렉션의 요소에 대한 반복자를 반환합니다. |
최대() | 이 메서드는 컬렉션에 있는 최대값을 반환하는 데 사용됩니다. |
병렬스트림() | 이 메서드는 이 컬렉션을 소스로 사용하여 병렬 스트림을 반환합니다. |
제거(객체 o) | 이 메서드는 컬렉션에서 지정된 개체를 제거하는 데 사용됩니다. 중복된 값이 있는 경우 이 메서드는 해당 개체의 첫 번째 항목을 제거합니다. |
RemoveAll(컬렉션 c) | 이 메서드는 해당 컬렉션에서 언급된 모든 개체를 컬렉션에서 제거하는 데 사용됩니다. |
RemoveIf(조건자 필터) | 이 메소드는 주어진 조건을 만족하는 이 컬렉션의 모든 요소를 제거하는 데 사용됩니다. 술부 . |
keepAll(컬렉션 c) | 이 메서드는 지정된 컬렉션에 포함된 이 컬렉션의 요소만 유지하는 데 사용됩니다. |
크기() | 이 메서드는 컬렉션의 요소 수를 반환하는 데 사용됩니다. |
분할기() | 이 방법은 분할기 이 컬렉션의 요소에 대해 설명합니다. |
개울() | 이 메소드는 이 컬렉션을 소스로 사용하여 순차적 스트림을 반환하는 데 사용됩니다. |
toArray() | 이 메소드는 이 컬렉션의 모든 요소를 포함하는 배열을 반환하는 데 사용됩니다. |
Java 컬렉션 인터페이스를 확장하는 인터페이스
컬렉션 프레임워크에는 모든 인터페이스가 특정 유형의 데이터를 저장하는 데 사용되는 여러 인터페이스가 포함되어 있습니다. 다음은 프레임워크에 존재하는 인터페이스입니다.
1. 반복 가능한 인터페이스
이는 전체 컬렉션 프레임워크의 루트 인터페이스입니다. 컬렉션 인터페이스는 반복 가능한 인터페이스를 확장합니다. 따라서 본질적으로 모든 인터페이스와 클래스는 이 인터페이스를 구현합니다. 이 인터페이스의 주요 기능은 컬렉션에 대한 반복자를 제공하는 것입니다. 따라서 이 인터페이스에는 반복자인 하나의 추상 메서드만 포함됩니다. 그것은
Iterator iterator();>
2. 수집 인터페이스
이 인터페이스는 반복 가능한 인터페이스를 확장하고 컬렉션 프레임워크의 모든 클래스에 의해 구현됩니다. 이 인터페이스에는 컬렉션에 데이터 추가, 데이터 제거, 데이터 지우기 등과 같은 모든 컬렉션의 기본 메서드가 모두 포함되어 있습니다. 이러한 메서드는 스타일에 관계없이 모든 클래스에서 구현되기 때문에 이 모든 메서드가 이 인터페이스에서 구현됩니다. 구현의. 또한 이 인터페이스에 이러한 메서드를 사용하면 메서드 이름이 모든 컬렉션에 공통적으로 적용됩니다. 따라서 간단히 말해서 이 인터페이스는 컬렉션 클래스가 구현되는 기반을 구축한다고 말할 수 있습니다.
삼. 목록 인터페이스
이는 컬렉션 인터페이스의 하위 인터페이스입니다. 이 인터페이스는 객체의 모든 정렬된 컬렉션을 저장할 수 있는 목록 유형의 데이터 전용입니다. 이를 통해 중복 데이터가 존재할 수도 있습니다. 이 목록 인터페이스는 ArrayList, Vector, Stack 등과 같은 다양한 클래스에 의해 구현됩니다. 모든 하위 클래스가 목록을 구현하므로 이러한 클래스 중 하나로 목록 개체를 인스턴스화할 수 있습니다.
예를 들어:
List al = new ArrayList (); List ll = new LinkedList (); List v = new Vector (); Where T is the type of the object>
List 인터페이스를 구현하는 클래스는 다음과 같습니다.
나). 배열목록
ArrayList는 Java에서 동적 배열을 제공합니다. 하지만 표준 배열보다 느릴 수 있지만 배열에서 많은 조작이 필요한 프로그램에서는 도움이 될 수 있습니다. 컬렉션이 커지면 ArrayList의 크기가 자동으로 늘어나고, 개체가 컬렉션에서 제거되면 축소됩니다. Java ArrayList를 사용하면 목록에 무작위로 액세스할 수 있습니다. ArrayList는 다음 용도로 사용할 수 없습니다. 래퍼 클래스 그런 경우에는.
다음 예를 통해 ArrayList를 이해해 보겠습니다.
자바
정수를 문자열로 변환 자바
// Java program to demonstrate the> // working of ArrayList> import> java.io.*;> import> java.util.*;> class> GFG {> > // Main Method> > public> static> void> main(String[] args)> > {> > // Declaring the ArrayList with> > // initial size n> > ArrayList al => new> ArrayList();> > // Appending new elements at> > // the end of the list> > for> (> int> i => 1> ; i <=> 5> ; i++)> > al.add(i);> > // Printing elements> > System.out.println(al);> > // Remove element at index 3> > al.remove(> 3> );> > // Displaying the ArrayList> > // after deletion> > System.out.println(al);> > // Printing elements one by one> > for> (> int> i => 0> ; i System.out.print(al.get(i) + ' '); } }> |
>
>산출
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
ii). 링크드리스트
LinkedList 클래스는 다음 예를 통해 LinkedList를 이해해 보겠습니다.
자바
// Java program to demonstrate the> // working of LinkedList> import> java.io.*;> import> java.util.*;> class> GFG {> > // Main Method> > public> static> void> main(String[] args)> > {> > // Declaring the LinkedList> > LinkedList ll => new> LinkedList();> > // Appending new elements at> > // the end of the list> > for> (> int> i => 1> ; i <=> 5> ; i++)> > ll.add(i);> > // Printing elements> > System.out.println(ll);> > // Remove element at index 3> > ll.remove(> 3> );> > // Displaying the List> > // after deletion> > System.out.println(ll);> > // Printing elements one by one> > for> (> int> i => 0> ; i System.out.print(ll.get(i) + ' '); } }> |
>
>산출
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
iii). 벡터
벡터는 Java에서 동적 배열을 제공합니다. 하지만 표준 배열보다 느릴 수 있지만 배열에서 많은 조작이 필요한 프로그램에서는 도움이 될 수 있습니다. 이는 구현 측면에서 ArrayList와 동일합니다. 그러나 벡터와 ArrayList의 주요 차이점은 Vector는 동기화되고 ArrayList는 동기화되지 않는다는 것입니다.
예를 들어 벡터를 이해해 보겠습니다.
자바
// Java program to demonstrate the> // working of Vector> import> java.io.*;> import> java.util.*;> class> GFG {> > // Main Method> > public> static> void> main(String[] args)> > {> > // Declaring the Vector> > Vector v => new> Vector();> > // Appending new elements at> > // the end of the list> > for> (> int> i => 1> ; i <=> 5> ; i++)> > v.add(i);> > // Printing elements> > System.out.println(v);> > // Remove element at index 3> > v.remove(> 3> );> > // Displaying the Vector> > // after deletion> > System.out.println(v);> > // Printing elements one by one> > for> (> int> i => 0> ; i System.out.print(v.get(i) + ' '); } }> |
>
>산출
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
iv). 스택
Stack 클래스는 다음을 모델링하고 구현합니다.후입 선출법. 기본 푸시 및 팝 작업 외에도 클래스는 비어 있음, 검색 및 엿보기 세 가지 기능을 더 제공합니다. 클래스는 Vector의 하위 클래스라고도 할 수 있습니다.
예를 들어 스택을 이해해 보겠습니다.
자바
// Java program to demonstrate the> // working of a stack> import> java.util.*;> public> class> GFG {> > // Main Method> > public> static> void> main(String args[])> > {> > Stack stack => new> Stack();> > stack.push(> 'Geeks'> );> > stack.push(> 'For'> );> > stack.push(> 'Geeks'> );> > stack.push(> 'Geeks'> );> > // Iterator for the stack> > Iterator itr = stack.iterator();> > // Printing the stack> > while> (itr.hasNext()) {> > System.out.print(itr.next() +> ' '> );> > }> > System.out.println();> > stack.pop();> > // Iterator for the stack> > itr = stack.iterator();> > // Printing the stack> > while> (itr.hasNext()) {> > System.out.print(itr.next() +> ' '> );> > }> > }> }> |
>
>산출
Geeks For Geeks Geeks Geeks For Geeks>
메모: Stack은 Vector의 하위 클래스이자 레거시 클래스입니다. 스레드 안전성이 필요하지 않은 환경에서는 오버헤드가 발생할 수 있는 스레드로부터 안전합니다. Stack의 대안은 다음을 사용하는 것입니다. 배열 대기열 제거 스레드로부터 안전하지 않으며 배열 구현이 더 빠릅니다.
4. 대기열 인터페이스
이름에서 알 수 있듯이 대기열 인터페이스는 실제 대기열 라인과 유사한 FIFO(선입선출) 순서를 유지합니다. 이 인터페이스는 요소의 순서가 중요한 모든 요소를 저장하는 데 전념합니다. 예를 들어, 티켓을 예약하려고 할 때마다 티켓은 선착순으로 판매됩니다. 따라서 요청이 대기열에 먼저 도착한 사람이 티켓을 얻습니다. 등 다양한 수업이 있어요 우선순위 대기열 , ArrayDeque 등. 이러한 모든 하위 클래스는 대기열을 구현하므로 이러한 클래스 중 하나를 사용하여 대기열 개체를 인스턴스화할 수 있습니다.
예를 들어:
Queue pq = new PriorityQueue (); Queue ad = new ArrayDeque (); Where T is the type of the object.>
가장 자주 사용되는 대기열 인터페이스 구현은 PriorityQueue입니다.
우선순위 대기열
PriorityQueue는 객체가 우선순위에 따라 처리되어야 할 때 사용됩니다. 큐는 선입선출(First-In-First-Out) 알고리즘을 따르는 것으로 알려져 있지만 가끔 큐의 요소를 우선순위에 따라 처리해야 할 경우에 이 클래스가 사용됩니다. PriorityQueue는 우선순위 힙을 기반으로 합니다. 우선순위 큐의 요소는 자연 순서에 따라 정렬됩니다. 비교기 어떤 생성자가 사용되는지에 따라 대기열 생성 시 제공됩니다.
예를 들어 우선순위 큐를 이해해 보겠습니다.
자바
// Java program to demonstrate the working of> // priority queue in Java> import> java.util.*;> class> GfG {> > // Main Method> > public> static> void> main(String args[])> > {> > // Creating empty priority queue> > PriorityQueue pQueue> > => new> PriorityQueue();> > // Adding items to the pQueue using add()> > pQueue.add(> 10> );> > pQueue.add(> 20> );> > pQueue.add(> 15> );> > // Printing the top element of PriorityQueue> > System.out.println(pQueue.peek());> > // Printing the top element and removing it> > // from the PriorityQueue container> > System.out.println(pQueue.poll());> > // Printing the top element again> > System.out.println(pQueue.peek());> > }> }> |
>
>산출
자바 문자열 배열
10 10 15>
5. 그리고 인터페이스
이는 아주 약간의 변형이다. 예를 들어:
Deque ad = new ArrayDeque (); Where T is the type of the object.>
deque 인터페이스를 구현하는 클래스는 ArrayDeque입니다.
ArrayDeque
컬렉션 프레임워크에 구현된 ArrayDeque 클래스는 크기 조정 가능한 배열을 적용하는 방법을 제공합니다. 이는 사용자가 대기열의 양쪽에서 요소를 추가하거나 제거할 수 있도록 확장하고 허용하는 특별한 종류의 배열입니다. 어레이 데크에는 용량 제한이 없으며 사용량을 지원하기 위해 필요에 따라 확장됩니다.
예를 들어 ArrayDeque를 이해해 보겠습니다.
자바
// Java program to demonstrate the> // ArrayDeque class in Java> import> java.util.*;> public> class> ArrayDequeDemo {> > public> static> void> main(String[] args)> > {> > // Initializing an deque> > ArrayDeque de_que> > => new> ArrayDeque(> 10> );> > // add() method to insert> > de_que.add(> 10> );> > de_que.add(> 20> );> > de_que.add(> 30> );> > de_que.add(> 40> );> > de_que.add(> 50> );> > System.out.println(de_que);> > // clear() method> > de_que.clear();> > // addFirst() method to insert the> > // elements at the head> > de_que.addFirst(> 564> );> > de_que.addFirst(> 291> );> > // addLast() method to insert the> > // elements at the tail> > de_que.addLast(> 24> );> > de_que.addLast(> 14> );> > System.out.println(de_que);> > }> }> |
>
>산출
[10, 20, 30, 40, 50] [291, 564, 24, 14]>
6. 인터페이스 설정
집합은 중복된 값을 저장할 수 없는 순서가 지정되지 않은 개체 모음입니다. 이 컬렉션은 객체의 중복을 피하고 고유한 객체만 저장하려는 경우에 사용됩니다. 이 집합 인터페이스는 HashSet, TreeSet, LinkedHashSet 등과 같은 다양한 클래스에 의해 구현됩니다. 모든 하위 클래스가 집합을 구현하므로 이러한 클래스 중 하나로 집합 객체를 인스턴스화할 수 있습니다.
예를 들어:
Set hs = new HashSet (); Set lhs = new LinkedHashSet (); Set ts = new TreeSet (); Where T is the type of the object.>
다음은 Set 인터페이스를 구현하는 클래스입니다.
나). 해시세트
HashSet 클래스는 해시 테이블 데이터 구조의 고유한 구현입니다. HashSet에 삽입하는 객체가 동일한 순서로 삽입된다는 보장은 없습니다. 객체는 해시코드를 기반으로 삽입됩니다. 이 클래스를 사용하면 NULL 요소를 삽입할 수도 있습니다. 예를 들어 HashSet을 이해해 보겠습니다.
자바
// Java program to demonstrate the> // working of a HashSet> import> java.util.*;> public> class> HashSetDemo {> > // Main Method> > public> static> void> main(String args[])> > {> > // Creating HashSet and> > // adding elements> > HashSet hs => new> HashSet();> > hs.add(> 'Geeks'> );> > hs.add(> 'For'> );> > hs.add(> 'Geeks'> );> > hs.add(> 'Is'> );> > hs.add(> 'Very helpful'> );> > // Traversing elements> > Iterator itr = hs.iterator();> > while> (itr.hasNext()) {> > System.out.println(itr.next());> > }> > }> }> |
>
>산출
Very helpful Geeks For Is>
ii). LinkedHashSet
LinkedHashSet은 HashSet과 매우 유사합니다. 차이점은 이중 연결 목록을 사용하여 데이터를 저장하고 요소의 순서를 유지한다는 것입니다.
예를 들어 LinkedHashSet을 이해해 보겠습니다.
자바
// Java program to demonstrate the> // working of a LinkedHashSet> import> java.util.*;> public> class> LinkedHashSetDemo {> > // Main Method> > public> static> void> main(String args[])> > {> > // Creating LinkedHashSet and> > // adding elements> > LinkedHashSet lhs> > => new> LinkedHashSet();> > lhs.add(> 'Geeks'> );> > lhs.add(> 'For'> );> > lhs.add(> 'Geeks'> );> > lhs.add(> 'Is'> );> > lhs.add(> 'Very helpful'> );> > // Traversing elements> > Iterator itr = lhs.iterator();> > while> (itr.hasNext()) {> > System.out.println(itr.next());> > }> > }> }> |
>
>산출
Geeks For Is Very helpful>
7. 정렬된 집합 인터페이스
이 인터페이스는 set 인터페이스와 매우 유사합니다. 유일한 차이점은 이 인터페이스에는 요소의 순서를 유지하는 추가 메서드가 있다는 것입니다. 정렬된 집합 인터페이스는 집합 인터페이스를 확장하고 정렬해야 하는 데이터를 처리하는 데 사용됩니다. 이 인터페이스를 구현하는 클래스는 TreeSet입니다. 이 클래스는 SortedSet을 구현하므로 이 클래스를 사용하여 SortedSet 객체를 인스턴스화할 수 있습니다.
예를 들어:
SortedSet ts = new TreeSet (); Where T is the type of the object.>
정렬된 집합 인터페이스를 구현하는 클래스는 TreeSet입니다.
트리세트
TreeSet 클래스는 저장을 위해 Tree를 사용합니다. 요소의 순서는 명시적 비교자가 제공되는지 여부에 관계없이 자연 순서를 사용하여 집합에 의해 유지됩니다. Set 인터페이스를 올바르게 구현하려면 이는 같음과 일치해야 합니다. 또한 사용되는 생성자에 따라 설정된 생성 시간에 제공되는 비교기에 의해 정렬될 수도 있습니다.
예를 들어 TreeSet을 이해해 보겠습니다.
자바
// Java program to demonstrate the> // working of a TreeSet> import> java.util.*;> public> class> TreeSetDemo {> > // Main Method> > public> static> void> main(String args[])> > {> > // Creating TreeSet and> > // adding elements> > TreeSet ts => new> TreeSet();> > ts.add(> 'Geeks'> );> > ts.add(> 'For'> );> > ts.add(> 'Geeks'> );> > ts.add(> 'Is'> );> > ts.add(> 'Very helpful'> );> > // Traversing elements> > Iterator itr = ts.iterator();> > while> (itr.hasNext()) {> > System.out.println(itr.next());> > }> > }> }> |
>
>산출
For Geeks Is Very helpful>
8. 지도 인터페이스
맵은 데이터 매핑을 위한 키-값 쌍을 지원하는 데이터 구조입니다. 이 인터페이스는 동일한 키가 여러 매핑을 가질 수 없기 때문에 중복 키를 지원하지 않지만, 서로 다른 키의 중복 값을 허용합니다. 데이터가 있고 키를 기반으로 작업을 수행하려는 경우 맵이 유용합니다. 이 지도 인터페이스는 다음과 같은 다양한 클래스로 구현됩니다. 해시맵 , 트리맵 등. 모든 하위 클래스가 지도를 구현하므로 이러한 클래스 중 하나를 사용하여 지도 객체를 인스턴스화할 수 있습니다.
예를 들어:
Map hm = new HashMap (); Map tm = new TreeMap (); Where T is the type of the object.>
Map 인터페이스의 자주 사용되는 구현은 HashMap입니다.
해시맵
HashMap은 Java Map 인터페이스의 기본 구현을 제공합니다. (키, 값) 쌍으로 데이터를 저장합니다. HashMap의 값에 액세스하려면 해당 키를 알아야 합니다. HashMap은 해싱이라는 기술을 사용합니다. 해싱은 인덱싱 및 검색 작업이 더 빨라지도록 큰 문자열을 동일한 문자열을 나타내는 작은 문자열로 변환하는 기술입니다. HashSet은 내부적으로 HashMap도 사용합니다.
예를 들어 HashMap을 이해해 보겠습니다.
자바
// Java program to demonstrate the> // working of a HashMap> import> java.util.*;> public> class> HashMapDemo {> > // Main Method> > public> static> void> main(String args[])> > {> > // Creating HashMap and> > // adding elements> > HashMap hm> > => new> HashMap();> > hm.put(> 1> ,> 'Geeks'> );> > hm.put(> 2> ,> 'For'> );> > hm.put(> 3> ,> 'Geeks'> );> > // Finding the value for a key> > System.out.println(> 'Value for 1 is '> + hm.get(> 1> ));> > // Traversing through the HashMap> > for> (Map.Entry e : hm.entrySet())> > System.out.println(e.getKey() +> ' '> > + e.getValue());> > }> }> |
>
>산출
Value for 1 is Geeks 1 Geeks 2 For 3 Geeks>