>  기사  >  Java  >  Java에서 일반적으로 사용되는 여러 데이터 구조를 요약하고 공유합니다.

Java에서 일반적으로 사용되는 여러 데이터 구조를 요약하고 공유합니다.

巴扎黑
巴扎黑원래의
2017-08-01 10:54:561836검색

JAVA에서 일반적으로 사용되는 데이터 구조(java.util.)

Java에는 일반적으로 사용되는 여러 데이터 구조가 있으며 주로 컬렉션과 맵의 두 가지 주요 인터페이스로 나뉩니다. 인터페이스는 메소드만 제공하고 메소드를 제공하지 않습니다. 구현 제공), 프로그램에서 궁극적으로 사용되는 데이터 구조는 이러한 인터페이스에서 상속된 데이터 구조 클래스입니다. 주요 관계(상속 관계)는 다음과 같습니다. (자세한 내용은 Java api 문서를 참조하세요!)

Collection--->Collection                                                                                     지도---->SortedMap------> ;TreeMap

Collection---->List---->(벡터 ArryList LinkedList)                                                  

Collection ---->설정-- ---->(HashSet LinkedHashSet SortedSet)

----컬렉션----------------

1.컬렉션

API ----이 클래스는 컬렉션에 대해 작동하거나 컬렉션을 반환하는 정적 메서드로만 구성됩니다. 여기에는 컬렉션에 대해 작동하는 다형성 알고리즘, 지정된 컬렉션이 지원하는 새 컬렉션을 반환하는 "래퍼" 및 기타 몇 가지가 포함되어 있습니다.

이 클래스의 메서드는 제공된 컬렉션이나 클래스 개체가 null인 경우 모두

NullPointerException을 발생시킵니다.

2、List

API----이 클래스는 작동하는 정적 메서드로만 구성됩니다. 컬렉션에 대해 작동하거나 컬렉션을 반환하는 다형성 알고리즘, 지정된 컬렉션이 지원하는 새 컬렉션을 반환하는 "래퍼" 및 기타 몇 가지 확률이 포함되어 있습니다.

이 클래스의 메서드는 제공된 컬렉션이나 클래스 개체가 null인 경우 모두

NullPointerException을 발생시킵니다.

List는 순서가 지정된 컬렉션입니다. 이 인터페이스를 사용하면 각 요소 위치의 삽입을 정확하게 제어할 수 있습니다. . 사용자는 인덱스(배열 첨자와 유사한 목록의 요소 위치)를 사용하여 목록의 요소에 액세스할 수 있으며 이는 Java 배열과 유사합니다.

3、Vector

API------ 는 우리가 사용하기 편리한 몇 가지 기능을 가지고 있으므로 의 한계를 피하기 어렵습니다. 어레이와 그 성능은 어레이를 능가할 수 없습니다. 그러므로 가능하다면 배열을 더 많이 사용해야 합니다. 또 다른 매우 중요한 점은 Vector가 스레드 동기화(동기화)된다는 점입니다. 이것이 Vector 및 ArrayList가 사용되는 이유입니다. 중요한 차이점. Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of aVector can grow or shrink as needed to accommodate adding and removing items after theVector


4、ArrayList
API ----

List

인터페이스를 구현하는 List 인터페이스의 크기 조정 가능한 배열 구현. 이 클래스는 조작하는 메서드를 제공합니다. 목록을 저장하기 위해 내부적으로 사용되는 배열의 크기(이 클래스는 비동기화된다는 점을 제외하면

Vector

와 대략 동일합니다.)

Vector와 동일하게 배열 기반의 Linked List이지만 차이점은 ArrayList가 동기화되지 않는다는 점입니다. 따라서 성능면에서는 벡터보다 우수하지만, 멀티스레드 환경에서 실행할 경우 스레드 동기화를 직접 관리해야 합니다. ㅋㅋㅋ 목록의 시작과 끝 부분에 있는 요소를 get,
remove

insert

이러한 작업을 통해 연결된 목록을 스택, 대기열로 사용할 수 있습니다. 또는 이중 종료 대기열.

LinkedList는 이전 두 목록과 다릅니다. 배열을 기반으로 하지 않으므로 배열 성능에 의해 제한되지 않습니다.

각 노드(Node)에는 콘텐츠의 두 가지 측면이 포함됩니다. 1. 노드 자체의 데이터(데이터) 2. 그래서 LinkedList에 액션을 추가하고 삭제할 때 배열 기반 ArrayList처럼 많은 데이터를 이동할 필요가 없습니다. 이는 nextNode의 관련 정보만 변경하면 가능합니다. 이것이 LinkedList의 장점입니다.

목록 요약:


모든 목록은 키-값 쌍이 아닌 다양한 유형의 단일 개체로 구성된 테이블만 수용할 수 있습니다. 예: [tom,1,c]

모든 목록은 동일한 요소를 가질 수 있습니다. 예를 들어 벡터는 [tom,koo,too,koo]

all을 가질 수 있습니다. 목록에는 [tom,null,1]

  • 과 같은 null 요소가 있을 수 있습니다. 배열 기반 목록(벡터, ArrayList)은 쿼리에 적합하고 LinkedList는 추가 및 삭제 작업에 적합합니다
  • 6. Set(인터페이스) API----공식적으로 집합에는 요소 쌍이 없으며 이름에서 알 수 있듯이 최대 하나의 null 요소가 포함됩니다. 이 인터페이스는 수학적

    set
  • 추상화를 모델로 합니다.
  • Set은 반복되는 요소를 포함하지 않는 컬렉션입니다

    7、HashSet

    API------이 클래스는 해시 테이블(실제로는HashMap 인스턴스)을 기반으로 하는Set 인터페이스를 구현합니다. 반복에 특히, 순서가 시간이 지나도 일정하게 유지된다는 보장은 없습니다. 이 클래스는

    Set과 List 모두 Collection 인터페이스를 구현하지만 상당히 다릅니다. List는 기본적으로 Array를 기반으로 합니다. 그러나 Set은 HashMap을 기반으로 구현됩니다. 이것이 Set과 List의 근본적인 차이점입니다. HashSet의 저장 방법은 HashMap의 Key를 Set의 해당 저장 항목으로 사용하는 것입니다. 보세요 HashSet의 add(Object obj) 메소드 구현을 한눈에 볼 수 있습니다.

    8、LinkedHashSet

    API ----

    List 인터페이스의 연결 목록 구현을 구현하고 모든 요소(null 포함)를 허용합니다. List 인터페이스에서 LinkedList 클래스는 목록의 시작과 끝 부분에 요소를get, removeinsert하는 균일한 이름의 메서드를 제공합니다. 이러한 작업을 통해 연결된 목록을 스택, 대기열로 사용할 수 있습니다. , 또는 연결된 목록인

    HashSet의 하위 클래스입니다.

    9、SortedSet

    API---A.) Set that further provides atotal ordering on its elements. The elements are ordered using theirnatural ordering, or by aComparator typically provided at sorted set creation time. The set's iterator will traverse the set in ascending element order. Several additional operations are provided to take advantage of the ordering. (This interface is the set analogue ofSortedMap

    세트 주문, SortedMap을 통해 달성됩니다.

    Set 요약:

    (1) Set 구현의 기본은 Map(HashMap)입니다. (2) Set 요소는 add(Object)를 사용하면 반복될 수 없습니다. obj) 기존 개체를 추가하는 메서드는 이전 개체를 덮어씁니다

    -------------Map------

    Map은 키 개체와 값 개체를 연결하는 컨테이너입니다. 맵 등이 될 수 있으므로 다중 레벨 매핑을 형성합니다. Set과 같은 주요 개체의 경우 맵 컨테이너의 주요 개체는 반복될 수 없습니다. 이는 동일한 두 개의 주요 개체가 있는 경우 검색 결과의 일관성을 유지하기 위한 것입니다. 아마도 당신이 생각한 값 객체가 아닐 수도 있고 결과적으로 혼란이 생길 ​​수도 있습니다. 따라서 키의 고유성은 매우 중요하며 키의 본질과 일치합니다. 세트. 물론, 사용 중에 특정 키에 해당하는 값 개체가 변경될 수 있습니다. 이 경우 마지막으로 수정된 값 개체가 해당 키에 해당합니다. 값 개체에 대한 고유성 요구 사항은 없습니다. 문제 없이 여러 개의 키를 값 개체에 매핑할 수 있습니다(그러나 사용에 불편을 초래할 수 있습니다. 무엇을 얻는지 알 수 없습니다. 해당 값 개체는 무엇입니까?) 열쇠).

    1、HashMap

    API ----Map 인터페이스의 해시 테이블 기반 구현 이 구현은 모든 선택적 맵 작업을 제공하고null을 허용합니다. 값과 null 키입니다. (HashMap 클래스는 비동기화되고 null을 허용한다는 점을 제외하면 Hashtable과 거의 동일합니다.) 이 클래스는 특히 맵의 순서를 보장하지 않습니다. 그것은 그것을 보장하지 않습니다 순서는 시간이 지나도 일정하게 유지됩니다.

    2、TreeMap

    API ----사용되는 생성자에 따라 지도 생성 시 제공되는 Red-Black 트리 기반NavigableMap implementation. The map is sorted according to thenatural ordering of its keys, or by aComparator. 키를 순서대로 저장하므로 firstKey(), lastKey() 등과 같은 일부 확장된 메서드가 있습니다. 또한 TreeMap에서 범위를 지정하여 하위 맵을 얻을 수도 있습니다.

    키와 값 사이의 연관은 매우 간단합니다. put(Object key, Object value) 메소드를 사용하여 키를 값 객체와 연관시킵니다. get(Object key)를 사용하여 이 키 개체에 해당하는 값 개체를 가져옵니다.


    ---------설명----------

    1. 일반적으로 사용되는 여러 카테고리의 차이점
    1. 배열목록: 단일 요소, ​​고효율, 주로 쿼리에 사용됨
    2. 벡터: 단일 요소, ​​스레드 안전, 주로 쿼리에 사용됨
    3. LinkedList: 단일 요소, ​​주로 삽입 및 삭제에 사용됩니다.
    4. 해시맵: 요소는 쌍으로 되어 있으며 요소는 비어 있을 수 있습니다.
    5. 해시테이블: 요소는 쌍을 이루고 스레드로부터 안전하며 요소는 null일 수 없습니다.
    2. 벡터, ArrayList 및 LinkedList
    대부분의 경우 성능의 Ar rayList가 가장 좋지만 컬렉션의 요소를 자주 삽입하고 삭제해야 하는 경우 LinkedList가 더 나은 성능을 발휘하지만 그 중 세 가지의 성능은 배열만큼 좋지 않습니다. 또한 Vector는 스레드 동기화됩니다. 따라서:
    배열을 사용할 수 있는 경우(요소 유형은 고정되고 배열 길이는 고정됨) 멀티 스레딩 문제를 고려하여 ArrayList에 우선순위를 두십시오.멀티 스레드 조건에서 사용하는 경우 Vector를 고려할 수 있습니다.
    자주 삭제하고 삽입해야 하는 경우 LinkedList가 유용합니다. 내가 모르는 것은 ArrayList를 사용하는 데 아무런 문제가 없다는 것입니다.

    세 가지, 컬렉션 및 배열

    in Java 컬렉션 클래스 프레임워크에는 Collections(Collection 아님!)와 Arrays라는 두 가지 클래스가 있습니다. 이는 JCF의 강력한 도구이지만 초보자는 이를 무시하는 경우가 많습니다. JCF 문서에 따르면 이 두 클래스는 래퍼 구현(래퍼 구현), 데이터 구조 알고리즘 및 배열 관련 애플리케이션을 제공합니다.
    위에서 언급한 "반감 검색" 및 "정렬"과 같은 고전적인 알고리즘을 잊지 않으실 것이라고 믿습니다. Collections 클래스는 데이터 구조 클래스에서 이러한 성가신 작업을 쉽게 완료하는 데 도움이 되는 풍부한 정적 메서드를 제공합니다. . :
    binarySearch: 절반 검색.
    sort: 정렬, 여기에는 퀵 정렬과 유사한 방법이 있지만 효율성은 여전히 ​​O(n * log n)이지만 안정적인 정렬 방법입니다.
    reverse: 선형 테이블을 역순으로 작동합니다. 이는 과거의 데이터 구조에 대한 고전적인 테스트 문제입니다.
    rotate: 특정 요소를 축으로 하여 선형 테이블을 "회전"합니다.
    swap: 선형 목록에서 두 요소의 위치를 ​​바꿉니다.
    ...
    컬렉션의 또 다른 중요한 기능은 다음과 같이 컬렉션을 특수 컬렉션으로 변환하는 몇 가지 방법을 제공하는 "래퍼"입니다.
    수정 불가능XXX: 읽기 전용 컬렉션으로 변환합니다. 여기서 XXX는 6개의 기본 컬렉션 인터페이스(Collection, List, Map, Set, SortedMap 및 SortedSet)를 나타냅니다. 읽기 전용 컬렉션을 삽입하거나 삭제하면 UnsupportedOperationException이 발생합니다.
    synchronizedXXX: 동기화된 컬렉션으로 변환합니다.
    싱글톤: 단 하나의 요소로 집합을 만듭니다. 여기서 싱글톤은 단일 요소 집합을 생성합니다.
    singletonList 및 SingletonMap은 각각 단일 요소 List 및 Map을 생성합니다.
    빈 집합: 컬렉션의 정적 속성 EMPTY_SET, EMPTY_LIST 및 EMPTY_MAP으로 표시됩니다.

위 내용은 Java에서 일반적으로 사용되는 여러 데이터 구조를 요약하고 공유합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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