>  기사  >  Java  >  컬렉션이란 무엇입니까? Java 컬렉션에 대한 기본 소개(프레임워크 다이어그램 포함)

컬렉션이란 무엇입니까? Java 컬렉션에 대한 기본 소개(프레임워크 다이어그램 포함)

不言
不言원래의
2018-09-15 17:35:514172검색

이 글의 내용은 컬렉션이란 무엇인가요? Java 컬렉션에 대한 기본 소개(프레임 다이어그램 포함)에는 특정 참조 가치가 있으므로 도움이 필요한 친구가 참고할 수 있기를 바랍니다.

컬렉션이란 무엇인가요?

Java 컬렉션 클래스는 java.util 패키지에 저장되며 객체를 저장하는 데 사용되는 컨테이너입니다.

참고: ① 컬렉션은 개체만 저장할 수 있습니다. 예를 들어 int 유형 데이터 1을 컬렉션에 저장하면 실제로는 자동으로 Integer 클래스로 변환된 후 Java의 각 기본 유형에 해당하는 참조 유형이 있습니다.

  ②. 컬렉션은 여러 개체에 대한 참조를 저장하며 개체 자체는 여전히 힙 메모리에 배치됩니다.

  ③ 컬렉션은 개수 제한 없이 다양한 유형의 데이터를 저장할 수 있습니다.

Java 컬렉션 클래스의 기본 개념

프로그래밍에서는 여러 데이터를 중앙 집중식으로 저장해야 하는 경우가 많습니다. 전통적으로 배열은 저장하려는 객체의 수를 미리 정확히 알고 있다면 좋은 선택입니다. 배열 초기화 중에 배열 길이가 지정되면 배열 길이는 불변입니다. 동적으로 증가할 수 있는 데이터를 저장해야 하는 경우(컴파일 시 특정 수를 결정할 수 없음) Java의 컬렉션 클래스가 좋은 설계입니다.

컬렉션 클래스는 주로 다른 데이터를 저장하고 보관하는 역할을 담당하므로 컬렉션 클래스를 컨테이너 클래스라고도 합니다. 모든 컬렉션 클래스는 java.util 패키지 아래에 있습니다. 나중에 멀티 스레드 환경에서 동시성 보안 문제를 처리하기 위해 java5는 java.util.concurrent 패키지에서 멀티 스레드를 지원하는 일부 컬렉션 클래스도 제공했습니다.

Java에서 컬렉션 클래스의 API와 프로그래밍 원리를 배울 때, "집합"은 Java 출현 이전의 매우 오래된 수학적 개념이라는 것을 이해해야 합니다. 수학적 개념의 관점에서 컬렉션을 이해하면 프로그래밍에서 언제 어떤 유형의 컬렉션 클래스를 사용해야 하는지 더 잘 이해하는 데 도움이 됩니다.

Java 컨테이너 클래스 라이브러리의 목적은 "객체를 저장"하고 이를 두 가지 다른 개념으로 나누는 것입니다.

1) 컬렉션
"반대" 요소 집합, 일반적으로 이러한 요소는 특정 규칙을 따릅니다
1.1 ) 목록은 유지 관리해야 합니다. 특정 요소 순서
1.2) 집합은 중복 요소를 가질 수 없습니다.
1.3) 대기열은 대기열의 순서를 유지합니다(선입선출)
2) 맵
"키-값 쌍" 개체 집합

1 ) 컬렉션은 각 위치에 하나의 요소(객체)만 저장할 수 있습니다.
2) 맵은 작은 데이터베이스처럼 "키-값 쌍"을 저장합니다. "key"

Java 컬렉션 클래스 아키텍처 계층 관계

를 통해 키에 해당하는 "값"을 찾을 수 있습니다.

1. 인터페이스 Iterable
Iterator 인터페이스는 Collection 클래스의 상위 인터페이스입니다. 이 Iterable 인터페이스를 구현하는 개체는 foreach를 사용한 순회를 허용합니다. 즉, 모든 Collection 개체에는 "foreach 순회 가능성"이 있습니다. 이 Iterable 인터페이스에는 iterator()라는 단 하나의 메서드만 있습니다. 이는 후속 순회 작업에 사용되는 일반 반복자를 반환합니다.
1.1 Collection
Collection은 가장 기본적인 컬렉션 인터페이스입니다. 이러한 개체를 컬렉션 요소라고 합니다. . Collection은 표준 정의를 제공하며 인스턴스화할 수 없는 인터페이스입니다. 1) Set
Set 컬렉션은 Set 컬렉션에 "던지는" 여러 개체 사이에 명확한 순서가 없습니다. Set은 Collection 인터페이스에서 상속되며 중복된 요소를 포함할 수 없습니다(이는 전체 Set 클래스 계층 구조의 공통 속성임을 기억하세요).
Set은 "==" 연산자를 사용하는 대신 equals 메서드를 기반으로 두 객체가 동일하다고 판단합니다. 즉, 새 요소를 추가할 때 새 요소 개체와 Set의 기존 개체 간의 같음 비교가 false를 반환하면 Set은 새 요소 개체를 수락하고 그렇지 않으면 거부됩니다.
Set의 이러한 제한으로 인해 Set 컬렉션을 사용할 때 다음 두 가지 사항에 주의해야 합니다. 1) Set 컬렉션에 있는 요소의 구현 클래스에 대해 효과적인 equals(객체) 메서드를 구현합니다. 2) Set 컬렉션의 생성자를 전달합니다. Set Collection 매개변수는 중복 요소를 포함할 수 없습니다.
1.1) HashSet HashSet은 Set 인터페이스의 일반적인 구현입니다. HashSet은 HASH 알고리즘을 사용하여 컬렉션에 요소를 저장하므로 액세스 및 검색 성능이 좋습니다. 요소가 HashSet 컬렉션에 저장되면 HashSet은 개체의 hashCode() 메서드를 호출하여 개체의 hashCode 값을 가져온 다음 HashCode 값을 기반으로 HashSet에서 개체의 저장 위치를 ​​결정합니다. ㅋㅋㅋ                             . 요소의 hashCode 값에 따라 요소의 저장 위치가 결정되지만, HashSet과 달리 연결 리스트를 사용하여 요소의 순서를 유지하므로 삽입된 순서대로 요소가 저장되는 것처럼 보입니다. .
   LinkedHashSet 컬렉션의 요소를 순회할 때 LinkedHashSet은 요소가 추가된 순서대로 컬렉션의 요소에 액세스합니다.
          LinkedHashSet은 요소의 삽입 순서를 유지해야 하므로 HashSet에 비해 성능은 약간 떨어지지만 Set에 있는 모든 요소에 반복적으로 접근할 때(순회) 좋은 성능을 발휘합니다(연결된 목록은 순회에 매우 적합합니다)
      1.2 ) SortedSet                                                         인터페이스는 주로 정렬 작업에 사용됩니다. 즉, 이 인터페이스를 구현하는 하위 클래스는 모두 정렬된 하위 클래스입니다. 1.2.1) TreeSet
열거형 클래스를 위해 특별히 설계된 컬렉션 클래스입니다. . EnumSet의 모든 요소는 열거형 값이어야 합니다. 열거형 유형은 EnumSet을 생성할 때 명시적으로 또는 암시적으로 지정됩니다. EnumSet의 집합 요소는 Enum 클래스의 열거 값 정의 순서에 따라 집합 요소의 순서를 결정합니다. 2) List
목록 집합은 순서가 지정되고 반복 가능한 각 요소 집합을 나타냅니다. 세트의 요소는 해당 순차 인덱스를 갖습니다. List 컬렉션을 사용하면 인덱스를 통해 지정된 위치의 컬렉션 요소에 액세스할 수 있으므로 중복 요소를 추가할 수 있습니다. 기본적으로 List 컬렉션은 추가된 순서대로 요소의 인덱스를 설정합니다. 2.1) ArrayList ArrayList는 배열을 기반으로 구현된 List 클래스로, 재할당을 허용하는 동적으로 증가하는 Object[] 배열을 캡슐화합니다.
2.2) Vector
2.2) Vector와 ArrayList는 사용법이 거의 동일하지만 Vector는 오래된 컬렉션이기 때문에 Vector에서는 메소드 이름이 긴 일부 메소드를 제공하지만 JDK1.2 이상에서는 Java에서 체계적인 컬렉션 Framework를 제공하므로 변경하겠습니다. List 인터페이스를 구현하고 이를 컬렉션 프레임워크 시스템에 통합하는 벡터
2.2.1) Stack
                Stack은 Vector에서 제공하는 하위 클래스로, "스택"(LIFO 후입선출)
              2.3) LinkedList          List, Deque를 구현합니다. List 인터페이스를 구현하고 이에 대한 대기열 작업을 수행합니다. 즉, 인덱스를 기반으로 컬렉션의 요소에 무작위로 액세스할 수 있습니다. 동시에 Deque 인터페이스도 구현합니다. 즉, LinkedList를 양방향 대기열로 사용할 수 있습니다. 당연히 "스택"으로도 사용할 수 있습니다.
3) 대기열
대기열은 "큐"(선입선출 FIFO)의 데이터 구조를 시뮬레이션하는 데 사용됩니다. 큐의 헤드는 큐에서 저장 시간이 가장 긴 요소를 보유하고, 큐의 테일은 큐에서 저장 시간이 가장 짧은 요소를 보유합니다. 새 요소가 대기열 끝에 삽입(제공)됩니다. 요소 액세스(폴링) 작업은 대기열의 헤드에 있는 요소를 반환합니다. 대기열은 대기열의 요소에 대한 무작위 액세스를 허용하지 않습니다. 생활에서 흔히 사용되는 대기열을 결합하면 이 개념을 이해하는 데 도움이 됩니다.
3.1) PriorityQueue
PriorityQueue는 상대적으로 표준적인 대기열 구현이 아닙니다. PriorityQueue에 의해 대기열 요소가 저장되는 순서는 대기열에 합류하는 순서가 아니라 다음 순서에 따릅니다. 큐 요소의 크기를 재정렬하면 클래스 이름에서도 알 수 있습니다.
3.2) Deque Deque 인터페이스는 "이중 끝 큐"를 나타내며 동시에 양쪽 끝에서 요소를 추가하고 삭제할 수 있습니다. Deque의 구현 클래스는 둘 다 큐 또는 스택으로 사용될 수 있습니다. 3.2.1) ArrayDeque는 ArrayList와 유사하게 배열 기반의 이중 종료 큐이며, 하위 계층은 동적 재배포 가능 개체를 사용합니다. 컬렉션 요소를 저장하기 위한 [] 배열 컬렉션 요소가 배열의 용량을 초과하면 시스템은 컬렉션 요소를 저장하기 위해 하위 계층에 새 Object[] 배열을 다시 할당합니다.
Map은 "매핑 관계"로 데이터를 저장하는 데 사용되므로 Map 컬렉션에 두 개의 값 세트가 저장되어 있고, 한 세트의 값은 Map에 키를 저장하는 데 사용되고, 다른 값 세트는 ​​맵에 값을 저장하는데 사용됩니다. 키와 값은 모두 모든 참조 유형의 데이터일 수 있습니다. 맵 키는 반복될 수 없습니다. 즉, 동일한 Map 객체의 두 키를 동등 메서드를 통해 비교한 결과는 항상 false를 반환합니다.
Map에 대해서는 코드 재사용의 관점에서 이해해야 합니다. Java는 먼저 Map을 구현한 다음 모든 값이 null인 Map을 래핑하여 Set 컬렉션을 구현합니다. -Map의 인터페이스 저장 형태는 Set 컬렉션과 완전히 동일합니다(즉, 키는 반복될 수 없습니다)
이러한 구현 클래스와 Map의 하위 인터페이스에 설정된 값의 저장 형태는 List와 매우 유사합니다(즉, 즉, 인덱스에 따라 값이 반복되어 검색될 수 있습니다)
1) HashMap
및 HashSet 컬렉션은 요소의 순서를 보장할 수 없으며, HashMap은 키-값 쌍의 순서를 보장할 수 없습니다. 그리고 HashSet과 마찬가지로 두 키가 같은지 판단하는 기준은 두 키를 비교하여 equals() 메서드를 통해 true를 반환하는 것이며,
동시에 두 키의 hashCode 값도 다음과 같아야 합니다. 같음
  1.1) LinkedHashMap
    LinkedHashMap은 또한 이중 연결 목록을 사용하여 키를 유지합니다. - 값 쌍의 순서 이 연결 목록은 키-값 쌍의 삽입 순서와 일치하는 맵의 반복 순서를 유지하는 역할을 합니다( 모든 키-값 쌍을 정렬하는 데 있어서 TreeMap과 다릅니다)
2) Hashtable
은 고대 Map 구현 클래스입니다.
  2.1) Properties
        Properties 개체는 속성 파일(Windows 플랫폼의 .ini 파일)을 처리할 때 특히 편리합니다. Properties 클래스는 Map 객체를 속성 파일과 연결할 수 있으므로 Map 객체의 키-값 쌍을 속성 파일에 쓰거나 속성 파일의 "속성 이름-속성 값"을 Map 객체. 3) SortedMap Set 인터페이스가 SortedSet 하위 인터페이스를 파생하는 것처럼 SortedSet 인터페이스에도 TreeSet 구현 클래스가 있고 Map 인터페이스도 SortedMap 하위 인터페이스를 파생하며 SortedMap 인터페이스에도 TreeMap 구현 클래스가 있습니다. 3.1) TreeMap
        TreeMap은 레드-블랙 트리 데이터 구조이며, 각 키-값 쌍은 레드-블랙 트리의 노드입니다. TreeMap이 키-값 쌍(노드)을 저장할 때 노드는 키에 따라 정렬되어야 합니다. TreeMap은 모든 키-값 쌍이 정렬된 상태인지 확인할 수 있습니다. 마찬가지로 TreeMap에도 자연 정렬과 사용자 정의 정렬이라는 두 가지 정렬 방법이 있습니다
4) WeakHashMap
WeakHashMap과 HashMap의 사용법은 기본적으로 유사합니다. 차이점은 HashMap 키가 실제 개체에 대한 "강력한 참조"를 유지한다는 것입니다. 즉, HashMap 개체가 삭제되지 않는 한 HashMap에서 참조하는 개체는 가비지 수집되지 않습니다.
그러나 WeakHashMap의 키는 실제 객체에 대한 약한 참조만 유지합니다. 즉, WeakHashMap 객체의 키가 참조하는 객체가 다른 강력한 참조 변수에서 참조되지 않으면 이러한 키가 참조하는 객체가 가비지 수집될 수 있다는 뜻입니다. 가비지
키에 해당하는 실제 개체의 가비지 수집 후 WeakHashMap은 이러한 키에 해당하는 키-값 쌍을 자동으로 삭제할 수도 있습니다.
5) IdentityHashMap
IdentityHashMap의 구현 메커니즘은 기본적으로 HashMap과 유사합니다. 두 개의 IdentityHashMap이 두 키가 완전히 동일한 경우에만(key1 == key2)
6) EnumMap
EnumMap은 열거형 클래스와 함께 사용되는 Map 구현입니다. EnumMap의 모든 키는 단일 열거형 클래스여야 합니다. 값. EnumMap을 생성할 때 해당 열거형 클래스를 명시적으로 또는 암시적으로 지정해야 합니다. EnumMap은 키의 자연 순서를 기반으로 합니다
  (즉, 열거 클래스에서 열거 값이 정의되는 순서)

Java 컬렉션 프레임워크 다이어그램

컬렉션이란 무엇입니까? Java 컬렉션에 대한 기본 소개(프레임워크 다이어그램 포함)

관련 권장 사항:

Java 수집 프레임워크 아키텍처 소개

Java 핵심 기술 포인트 수집 프레임워크 상세 소개

위 내용은 컬렉션이란 무엇입니까? Java 컬렉션에 대한 기본 소개(프레임워크 다이어그램 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.