Java 컬렉션 프레임워크
Java collections frameworkJava 수집 프레임워크는 일반적으로 재사용 가능한 수집 데이터 구조를 구현하는 클래스 및 인터페이스 모음입니다.[1]
프레임워크라고 일컬어지지만, 그것은 도서관 방식으로 작동한다. 수집 프레임워크는 다양한 수집과 이를 구현하는 클래스를 정의하는 두 가지 인터페이스를 제공한다.
배열과의 차이점
컬렉션과 어레이는 둘 다 객체에 대한 참조를 보유하고 있으며 그룹으로 관리할 수 있다는 점에서 유사하다. 그러나 배열과 달리 컬렉션은 인스턴스화할 때 특정 용량을 할당할 필요가 없다. 컬렉션은 또한 객체를 추가하거나 제거할 때 자동으로 크기가 커지고 축소될 수 있다. 컬렉션은 int, long 또는 double과 같은 기본 데이터 유형 요소(기본 유형)를 포함할 수 없으며, 대신 정수, Long 또는 Double과 같은 Wrapper 클래스를 보유한다.[2]
역사
JDK 1.2 이전 버전의 Java 플랫폼에서의 수집 구현에는 데이터 구조 클래스가 거의 포함되지 않았지만 수집 프레임워크는 포함하지 않았다.[3] 자바 객체를 그룹화하는 표준 방법은 배열, 벡터, 해시테이블 클래스를 경유하는 방식이었는데, 안타깝게도 확장하기가 쉽지 않았고, 표준 멤버 인터페이스도 구현하지 않았다.[4]
재사용 가능한 수집 데이터 구조의 필요성을 해결하기 위해 몇 가지 독립적인 프레임워크가 개발되었으며,[3] 가장 많이 사용된 것은 Doug Lea의 수집 패키지 및 주요 [5]목표가 C++ Standard Template Library(STL)와의 정합성이었던 ObjectSpace Generic Collection Library(JGL)이다.[6][7]
컬렉션 프레임워크는 주로 Joshua Bloch에 의해 설계되고 개발되었으며, JDK 1.2에 도입되었다. 그것은 결과적으로 더그 리아의 컬렉션 패키지의 많은 아이디어와 수업을 재사용했고, 결과적으로 더그 리아의 컬렉션 패키지는 더그 리아의 컬렉션 패키지로 사용되지 않았다.[5] 선 마이크로시스템스는 컴팩트한 프레임워크를 원했고, C++와의 일관성이 목표 중 하나가 아니었기 때문에 JGL의 아이디어를 사용하지 않기로 선택했다.[8]
Doug Lea는 나중에 새로운 컬렉션 관련 클래스로 구성된 동시성 패키지를 개발했다.[9] 이러한 동시성 유틸리티의 업데이트된 버전은 JSR 166에 따라 JDK 5.0에 포함되었다.
건축
Java의 거의 모든 컬렉션은 Java.util에서 파생된다.수집 인터페이스. 컬렉션은 모든 컬렉션의 기본 부분을 정의한다. 인터페이스는 컬렉션에 추가() 및 제거() 방법을 각각 명시한다. 또한 수집을 수집에 포함된 모든 요소의 단순한 배열로 변환하는 toArray() 방법도 필요하다. 마지막으로 포함() 방법은 지정된 요소가 컬렉션에 있는지 점검한다. Collection 인터페이스는 java.lang의 하위 인터페이스다.반복할 수 있으므로 모든 수집은 개별 문장의 대상이 될 수 있다. (복제할 수 있는 인터페이스는 각 문장이 사용하는 반복자() 방법을 제공한다.) 모든 컬렉션에는 컬렉션의 모든 요소를 통과하는 반복기가 있다. 또한 컬렉션은 일반적이다. 어떤 컬렉션이든 모든 클래스를 저장하기 위해 쓸 수 있다. 예를 들어, Collection<String>
스트링을 고정할 수 있으며, 컬렉션의 요소들은 어떠한 주조도 필요 없이 문자열로 사용될 수 있다.[10] 각도가 지정된 브래킷에 유의하십시오. < >
컬렉션의 유형을 지정하는 형식 인수를 보유할 수 있다.
세 가지 유형의 컬렉션
컬렉션에는 순서 목록, 사전/맵, 세트 등 세 가지 일반적인 유형이 있다.
순서목록은 프로그래머가 특정 순서에 따라 항목을 삽입하고 동일한 순서에 따라 항목을 검색할 수 있도록 한다. 그 예가 대기자 명단이다. 순서 목록의 기본 인터페이스를 목록 및 대기열이라고 한다.
사전/맵은 룩업 키가 있는 객체에 대한 참조를 저장하여 객체의 값에 액세스한다. 열쇠의 한 예는 신분증이다. 사전/맵의 기본 인터페이스를 맵이라고 한다.
세트는 반복될 수 있는 정렬되지 않은 모음이며, 각 요소를 한 번에 포함할 수 있다. 세트의 기본 인터페이스를 Set라고 한다.[2]
목록 인터페이스
목록은 Java.util을 통해 수집 프레임워크에 구현된다.목록 인터페이스 그것은 목록을 배열의 본질적으로 더 유연한 버전으로 정의한다. 요소에는 특정한 순서가 있으며, 중복 요소도 허용된다. 원소는 특정 위치에 배치할 수 있다. 그들은 또한 리스트 내에서 검색될 수 있다. 목록을 구현하는 구체적인 클래스의 두 가지 예는 다음과 같다.
- java.util.목록을 배열로 구현하는 ArrayList. 목록 고유의 기능이 필요할 때마다 클래스는 이를 위해 요소를 배열 내에서 이동시킨다.
- java.util.LinkedList. 이 클래스는 목록의 이전 노드와 다음 노드에 대한 포인터가 각각 있는 노드에 요소를 저장한다. 목록은 포인터를 따라 이동할 수 있으며, 노드를 제자리에 배치하기 위해 포인터를 변경하기만 하면 요소를 추가하거나 제거할 수 있다.[11]
스택 클래스
스택은 java.util을 사용하여 생성된다.스택. 스택은 새 객체를 스택(method push()) 위에 놓고 스택에서 객체를 가져오는 방법(method pop())을 제공한다. 스택은 LIFO(Last-in-First-out)에 따라 객체를 반환한다. 예를 들어, 스택에 가장 최근에 배치된 객체가 먼저 반환된다. java.util.스택은 자바에서 제공하는 스택의 표준 구현이다. 스택 클래스는 LIFO(Last-in-First-out) 객체 스택을 나타낸다. 클래스 java.util을 확장한다.벡터를 스택으로 처리할 수 있는 다섯 가지 연산을 가진 벡터. 일반적인 푸시 및 팝 연산은 물론 스택의 상단 항목을 엿보는 방법, 스택이 비어 있는지 테스트하는 방법, 스택에서 항목을 검색하여 위에서 얼마나 떨어져 있는지 알아보는 방법 등이 제공된다. 스택이 처음 생성되면 항목이 포함되지 않는다.
대기열 인터페이스
java.util.큐 인터페이스는 요소가 삽입된 순서대로 저장되는 큐 데이터 구조를 정의한다. 새로 추가된 것은 줄 끝에 가서, 요소들은 앞쪽에서 제거된다. 선입선출 시스템을 만든다. 이 인터페이스는 java.util에 의해 구현된다.LinkedList, java.util.ArrayDeque 및 Java.util.우선 순위큐. 링크드리스트는 물론 목록 인터페이스를 구현하며 하나로도 사용할 수 있다. 하지만 큐 방식도 있다. ArrayDeque는 큐를 배열로 구현한다. LinkedList와 ArrayDeque는 또한 java.util을 구현한다.더 많은 유연성을 제공하는 디큐 인터페이스.[12]
java.util.큐는 하위 인터페이스인 java.util.concurrent와 함께 보다 유연하게 사용할 수 있다.차단 큐. BlockingQueue 인터페이스는 일반 대기열처럼 작동하지만 대기열에 추가 및 제거 작업이 차단되고 있다. 빈 대기열에서 제거가 호출되는 경우 지정된 시간 또는 항목이 대기열에 나타날 때까지 무한정 기다리도록 설정할 수 있다. 마찬가지로, 항목을 추가하면 큐의 선택적 용량 제한이 적용되며, 메소드는 반환하기 전에 큐에서 공간을 사용할 수 있을 때까지 기다릴 수 있다.[13]
java.util.우선 순위대기열에서 Java.util을 구현함.줄을 서라, 하지만 바꿔라. 요소가 삽입되는 순서대로 정렬되는 대신 우선 순서에 따라 정렬한다. 우선순위를 결정하는 데 사용되는 방법은 요소의 비교() 방법 또는 생성자에 주어진 방법이다. 클래스는 힙을 사용하여 항목을 정렬하여 이를 만든다.[14]
더블 엔드 큐(디큐) 인터페이스
java.util.대기열 인터페이스는 java.util에 의해 확장된다.디큐 하위 인터페이스. Deque는 더블 엔드 큐를 만든다. 일반 대기열은 후면 삽입과 전면 제거만 허용하지만, 디큐는 전면과 후면에서 삽입이나 제거를 허용한다. 디큐는 앞이나 뒤로, 또는 동시에 둘 다 사용할 수 있는 큐와 같다. 또한 전진 및 후진 반복기가 모두 생성될 수 있다. Deque 인터페이스는 java.util에 의해 구현된다.ArrayDeque 및 Java.util.LinkedList.[15]
java.util.concurrent.BlockingDeque 인터페이스는 java.util.concurrent와 유사하게 작동한다.차단 큐. 삽입 또는 제거가 가능해질 때까지 기다리는 시간제한과 동일한 삽입 및 제거 방법이 제공된다. 그러나 인터페이스는 또한 디큐의 유연성을 제공한다. 삽입과 제거는 양쪽 끝에서 일어날 수 있다. 차단 기능은 디큐 기능과 결합되어 있다.[16]
인터페이스 설정
Java의 Java.util.Set interface는 세트를 정의한다. 세트에는 어떤 중복 요소도 포함될 수 없다. 또한 세트에는 정해진 순서가 없다. 이처럼 색인으로 원소를 찾을 수 없다. 세트는 java.util에 의해 구현된다.HashSet, java.util.LinkedHashSet 및 java.util.트리셋. 해시 집합은 해시 테이블을 사용한다. 좀 더 구체적으로, 그것은 java.util을 사용한다.해시와 요소를 저장하고 중복되는 것을 방지하는 해시맵. java.util.LinkedHashSet는 모든 요소를 삽입 순서에 따라 연결하는 이중 연결 목록을 생성하여 이를 확장한다. 이렇게 하면 집합에 대한 반복 순서가 예측 가능하게 된다. java.util.TreeSet는 Java.util에 의해 구현된 빨간색-검은색 트리를 사용한다.트리맵. 빨강-검은 나무는 중복이 없도록 한다. 또한 TreeSet이 java.util을 구현할 수 있도록 한다.정렬된 집합.[17]
java.util.set 인터페이스는 java.util에 의해 확장된다.SortedSet 인터페이스. 일반 집합과 달리, 정렬된 집합의 요소는 요소의 비교() 방법 또는 정렬된 집합의 생성자에게 제공되는 방법에 의해 정렬된다. 정렬된 집합의 첫 번째 요소와 마지막 요소를 검색할 수 있으며, 하위 집합은 정렬된 집합의 시작 또는 끝에서 시작 또는 종료뿐만 아니라 최소값과 최대값을 통해 생성할 수 있다. SortedSet 인터페이스는 java.util에 의해 구현된다.트리셋.[18]
java.util.SortedSet는 java.util을 통해 더 확장된다.NavigableSet 인터페이스. SortedSet와 유사하지만 몇 가지 추가 방법이 있다. 바닥(), 천장(), 하단() 및 상위() 방법은 매개변수에 가까운 요소를 집합에서 찾는다. 또한 세트의 항목에 대한 내림차림 반복기가 제공된다. SortedSet와 마찬가지로, java.util.TreeSet은 NavigableSet을 구현한다.[19]
인터페이스 매핑
맵은 java.util에 의해 정의된다.Java에서 인터페이스를 매핑하십시오. 맵은 키를 요소와 연결하는 간단한 데이터 구조다. 이것은 지도가 매우 유연하도록 한다. 키가 요소의 해시 코드인 경우, 맵은 본질적으로 집합이다. 단순히 증가하는 숫자에 지나지 않으면 리스트가 된다. 지도는 java.util에 의해 구현된다.HashMap, java.util.LinkedHashMap 및 java.util.트리맵. 해시맵은 해시 테이블을 사용한다. 키의 해시는 다양한 버킷의 요소를 찾는 데 사용된다. LinkedHashMap은 요소들 사이에 이중으로 연결된 목록을 만들어, 그것들을 지도에 삽입된 순서대로 접근할 수 있게 함으로써 이것을 확장한다. 트리맵은 해시맵과 LinkedHashMap과는 대조적으로 빨간색-검은색 트리를 사용한다. 키는 트리의 노드에 대한 값으로 사용되며, 노드는 맵의 요소를 가리킨다.[20]
java.util.맵 인터페이스는 하위 인터페이스인 java.util에 의해 확장된다.정렬된 맵. 이 인터페이스는 제공된 키에 따라 정렬된 맵을 정의한다. 생성자에서 정렬된 맵에 대해 제공된 방법 또는 비교()를 다시 한 번 사용하여 키 요소 쌍을 키별로 정렬한다. 지도에서 첫 번째와 마지막 키를 호출할 수 있다. 또한, 최소 키와 최대 키로 잠수함을 만들 수 있다. 정렬된 맵은 java.util에 의해 구현된다.트리맵.[21]
java.util.NavigableMap 인터페이스는 Java.util을 확장한다.다양한 방법으로 정렬된 맵. 주어진 키에 가장 가까운 키나 맵 엔트리를 어느 방향으로든 찾아내는 방법을 호출할 수 있다. 지도 역시 역순으로 지도를 만들 수 있으며, 지도에서 역순으로 반복기를 만들 수 있다. Java.util에 의해 구현된다.트리맵.[22]
Java 컬렉션 프레임워크 확장
자바 컬렉션 프레임워크는 가방, 양방향 지도 등의 컬렉션 유형과 유니온 및 교차로 제작을 위한 유틸리티를 추가하는 Apache Commons Collections 라이브러리에 의해 확장된다.[23]
구글은 구아바 도서관의 일부로 자체 소장 도서관을 출시했다.
참고 항목
참조
- ^ "Lesson: Introduction to Collections". Oracle Corporation. Retrieved 2010-12-22.
- ^ a b Horstmann, Cay (2014). Big Java Early Objects.
- ^ a b "Java Collections Framework" (PDF). IBM. Archived from the original (PDF) on 2011-08-07.
- ^ Becker, Dan (November 1, 1998). "Get started with the Java Collections Framework". JavaWorld. Retrieved 2020-07-13.
Before Collections made its most welcome debut, the standard methods for grouping Java objects were via the array, the Vector, and the Hashtable. All three of these collections have different methods and syntax for accessing members: arrays use the square bracket ([]) symbols, Vector uses the elementAt method, and Hashtable uses
get
andput
methods. - ^ a b Lea, Doug. "Overview of the collections Package". Retrieved 2011-01-01.
The Sun Java Development Kit JDK1.2 finally includes a standard set of collection classes. While there are some design and implementation differences, the JDK1.2 package contains most of the same basic abstractions, structure, and functionality as this package. For this reason, this collections package will NOT be further updated
- ^ "Generic Collection Library for Java™". Retrieved 2011-01-01.
- ^ Vanhelsuwé, Laurence (June 1, 1997). "Need a good set of abstract data structures? ObjectSpace's JGL packs a punch!". JavaWorld. Retrieved 2020-07-13.
As with Java itself, the Java Generic Library borrows heavily from the C++ camp: It takes the best from C++'s STL, while leaving the C++ warts behind. Most C++ programmers today will know of their STL, but few are managing to exploit its potential.
- ^ Vanhelsuwé, Laurence (January 1, 1999). "The battle of the container frameworks: which should you use?". JavaWorld. Retrieved 2020-07-13.
Comparing ObjectSpace Inc.'s JGL and Sun's Collections Framework turns out to be like comparing apples and kiwi fruits. At first sight, the two frameworks seem to be competing for the same developers, but after a closer inspection it is clear that the two cannot be compared fairly without acknowledging first that the two frameworks have different goals. If, like Sun's documentation states, Collections is going to homogenize Sun's own APIs (core API, extensions, etc.), then clearly Collections has to be great news, and a good thing, even to the most fanatic JGL addict. Provided Sun doesn't break its promise in this area, I'll be happy to invest my resources in adopting Collections in earnest.
- ^ Lea, Doug. "Overview of package util.concurrent Release 1.3.4". Retrieved 2011-01-01.
Note: Upon release of J2SE 5.0, this package enters maintenance mode: Only essential corrections will be released. J2SE5 package java.util.concurrent includes improved, more efficient, standardized versions of the main components in this package.
- ^ "Iterable (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "List (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "Queue (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "BlockingQueue (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "PriorityQueue (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "Deque (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "BlockingDeque (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "Set (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "SortedSet (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "NavigableSet (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06.
- ^ "Map (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "SortedMap (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "NavigableMap (Java Platform SE 7 )". Docs.oracle.com. 2013-06-06. Retrieved 2013-08-16.
- ^ "Collections - Home". Commons.apache.org. 2013-07-04. Retrieved 2013-08-16.
![]() | Wikibook Java Programming에는 다음과 같은 주제의 페이지가 있다. |