>  기사  >  Java  >  자바 데이터 구조는 무엇입니까?

자바 데이터 구조는 무엇입니까?

王林
王林원래의
2021-04-12 14:34:5121898검색

Java 데이터 구조에는 1. 목록, 4. LinkedList, 7. LinkedHashSet, 10. HashMap이 포함됩니다.

자바 데이터 구조는 무엇입니까?

이 기사의 운영 환경: windows10 시스템, java 1.8, thinkpad t480 컴퓨터.

Java에는 일반적으로 사용되는 여러 데이터 구조가 있는데, 이는 주로 컬렉션과 맵(인터페이스는 메소드만 제공하고 구현은 제공하지 않음)의 두 가지 주요 인터페이스로 나뉘며, 궁극적으로 프로그램에서 사용되는 데이터 구조는 데이터 구조입니다. 이러한 인터페이스 종류에서 상속됩니다.

Collection---->Collections   
Map----->SortedMap------>TreeMap          Map------>HashMap
Collection---->List----->(Vector \ ArryList \ LinkedList)
Collection---->Set------>(HashSet \ LinkedHashSet \ SortedSet)

List(인터페이스)

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

Vector

Array-based List는 실제로 배열이 우리가 사용할 수 없는 일부 기능을 캡슐화하므로 배열의 한계를 피하기 어렵고 동시에 성능도 배열을 초과할 수 없습니다. 그러므로 가능하다면 배열을 더 많이 사용해야 합니다. 또 다른 매우 중요한 점은 Vector가 스레드 동기화(동기화)된다는 것입니다. 이는 Vector와 ArrayList의 중요한 차이점이기도 합니다.

ArrayList

벡터와 마찬가지로 배열을 기반으로 하는 연결 리스트이지만 ArrayList는 동기화되지 않는다는 점이 다릅니다. 따라서 성능면에서는 벡터보다 우수하지만, 멀티스레드 환경에서 실행할 경우 스레드 동기화를 직접 관리해야 합니다.

LinkedList

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

각 노드(Node)에는 콘텐츠의 두 가지 측면이 포함됩니다.

1. 노드 자체의 데이터(데이터)

2.

그래서 LinkedList에 액션을 추가하고 삭제할 때 배열 기반 ArrayList처럼 많은 데이터를 이동할 필요가 없습니다. 이는 nextNode의 관련 정보만 변경하면 가능합니다. 이것이 LinkedList의 장점입니다.

목록 요약

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

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

모든 목록은 null 요소를 가질 수 있습니다(예: [tom, null) ,1 ]

Array 기반 List(Vector, ArrayList)는 쿼리에 적합하고 LinkedList는 추가 및 삭제 작업에 적합합니다.

Set(인터페이스)

Set는 반복되는 요소를 포함하지 않는 Collection입니다

HashSet

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

LinkedHashSet

연결된 목록인 HashSet의 하위 클래스입니다.

SortedSet

Ordered Set, SortedMap을 통해 구현됩니다.

Map(인터페이스)

Map은 키 개체와 값 개체를 연결하는 컨테이너이며, 값 개체는 Map 등이 될 수 있어 다단계 매핑을 형성합니다. Set과 같은 주요 개체의 경우 맵 컨테이너의 주요 개체는 반복될 수 없습니다. 이는 동일한 두 개의 주요 개체가 있는 경우 검색 결과의 일관성을 유지하기 위한 것입니다. 아마도 당신이 생각한 값 객체가 아닐 수도 있고 결과적으로 혼란이 생길 ​​수도 있습니다. 따라서 키의 고유성은 매우 중요하며 키의 본질과 일치합니다. 세트.

물론 사용 중에 특정 키에 해당하는 값 개체가 변경될 수 있습니다. 이 경우 마지막으로 수정된 값 개체가 해당 키에 해당합니다. 값 개체에 대한 고유성 요구 사항은 없습니다. 문제 없이 여러 개의 키를 값 개체에 매핑할 수 있습니다(그러나 사용에 불편을 초래할 수 있습니다. 무엇을 얻는지 알 수 없습니다. 해당 값 개체는 무엇입니까?) 열쇠).

(무료 동영상 튜토리얼 공유: java 동영상 튜토리얼)

HashMap

해시 테이블 기반의 Map 인터페이스 구현. 이 구현은 모든 선택적 매핑 작업을 제공하고 null 값과 null 키를 허용합니다. (HashMap 클래스는 동기화되지 않고 null을 허용한다는 점을 제외하면 Hashtable과 거의 동일합니다.) 이 클래스는 맵의 순서를 보장하지 않으며 특히 순서가 불변임을 보장하지 않습니다. 또한 HashMap은 스레드로부터 안전하지 않습니다. 즉, 멀티 스레드 환경에서는 문제가 있을 수 있지만 Hashtable은 스레드로부터 안전합니다.

TreeMap

TreeMap은 키를 순서대로 저장하고,

HashTable

(1) Hashtable은 해시 테이블이며, 여기에 저장되는 콘텐츠는 키-값 매핑입니다.

(2) Hashtable은 Dictionary에서 상속하고 Map, Cloneable 및 java.io.Serialized 인터페이스를 구현합니다.

(3) Hashtable의 기능은 모두 동기식이므로 스레드로부터 안전합니다. 해당 키나 값은 null일 수 없습니다.

일반적으로 사용되는 여러 클래스 간의 차이점

1. ArrayList: 단일 요소, ​​고효율, 주로 쿼리에 사용됨

2. 벡터: 단일 요소, ​​스레드로부터 안전하며 주로 쿼리

3에 사용됩니다. LinkedList: 단일 요소, ​​주로 삽입 및 삭제에 사용됩니다.

4. HashMap: 요소는 쌍으로 되어 있으며 요소는 비어 있을 수 있습니다

5. HashTable: 요소는 쌍으로 되어 있고 스레드로부터 안전하며 요소는 비워둘 수 없습니다.

Vector, ArrayList 및 LinkedList

대부분의 경우 ArrayList가 성능 측면에서 가장 좋지만 컬렉션의 요소를 자주 삽입하고 삭제해야 하는 경우 , LinkedList는 문제가 있을 것입니다. 상대적으로 성능이 좋지만 그 중 세 가지의 성능은 배열만큼 좋지 않습니다. 또한 Vector는 스레드 동기화됩니다. 따라서:

배열을 사용할 수 있다면(요소 유형은 고정되고 배열 길이는 고정됨) List 대신 배열을 사용해 보세요.

빈번한 삭제 및 삽입 작업이 없고 필요하지 않은 경우; 멀티스레딩 문제를 고려하려면 ArrayList를 우선시하세요.

멀티스레딩 조건에서 사용한다면 Vector를 고려해 보세요.

자주 삭제하고 삽입해야 한다면 LinkedList가 유용합니다. 아무것도 모릅니다. ArrayList를 사용하는 데 아무런 문제가 없습니다.

Stack

스택은 한쪽 끝에서만 삽입하고 삭제할 수 있는 특수 선형 목록입니다. 먼저 들어온 데이터가 스택의 맨 아래로 푸시되고, 마지막 데이터가 스택의 맨 위에 놓이게 되는 원리에 따라 데이터를 저장합니다. 스택의 맨 위에서부터(마지막 데이터가 먼저 읽혀짐)

Queue

테이블의 앞단(전면)에서만 삭제 작업과 테이블의 뒷단(후면)에서 삽입 작업만 허용하는 특수 선형 테이블입니다. 삽입 작업을 수행하는 끝을 큐의 꼬리라고 하고 삭제 작업을 수행하는 끝을 큐의 헤드라고 합니다. 큐에 요소가 없으면 빈 큐라고 합니다.

Array

프로그래밍에서는 처리의 편의를 위해 동일한 유형의 여러 변수를 순서대로 구성합니다. 이러한 유사한 데이터 요소를 순서대로 배열한 집합을 배열이라고 합니다. C 언어에서 배열은 구성된 데이터 유형입니다. 배열은 여러 배열 요소로 분해될 수 있으며 이러한 배열 요소는 기본 데이터 유형이거나 생성된 유형일 수 있습니다. 따라서 배열요소의 종류에 따라 배열은 수치배열, 문자배열, 포인터배열, 구조배열 등 다양한 범주로 나눌 수 있다.

연결된 목록

물리적 저장 장치의 비연속적이고 비순차적인 저장 구조입니다. 데이터 요소의 논리적 순서는 연결 목록의 포인터 링크 순서를 통해 구현됩니다.

연결된 목록은 일련의 노드(연결된 목록의 각 요소를 노드라고 함)로 구성되며 노드는 런타임에 동적으로 생성될 수 있습니다. 각 노드는 두 부분으로 구성됩니다.

하나는 데이터 요소를 저장하는 데이터 필드이고 다른 하나는 다음 노드의 주소를 저장하는 포인터 필드입니다.

Tree

A 트리는 n(n>0) 노드를 포함하는 유한 집합 K이고 K에서 관계 N이 정의됩니다. N은 다음 조건을 만족합니다.

(1) 노드 k0이 하나만 있고, 관계 N에 대한 선행자가 없는 노드를 트리의 루트 노드라고 합니다. 루트라고 함

(2) K0를 제외하고 k의 각 노드는 관계 N에 대한 선행 항목을 하나만 갖습니다.

(3) K의 각 노드는 관계 N에 대해 m개의 후속 노드(m>=0)를 가질 수 있습니다.

Heap

컴퓨터 과학에서 힙은 특별한 트리 데이터 구조이며 각 노드에는 값이 있습니다. 일반적으로 우리가 힙의 데이터 구조라고 부르는 것은 이진 힙을 나타냅니다. 힙의 특징은 루트 노드가 가장 작은(또는 가장 큰) 값을 가지며, 루트 노드의 두 하위 트리도 힙이라는 것입니다.

해시 테이블

구조에 K와 동일한 키워드를 가진 레코드가 있는 경우 f(K)의 저장 위치에 있어야 합니다. 따라서, 검색 중인 기록을 비교 없이 바로 얻을 수 있습니다. 이 대응 f를 해시 함수라고 하며, 이 아이디어를 바탕으로 구축된 테이블이 해시 테이블입니다.

관련 추천:

java 인터뷰 질문 및 답변

위 내용은 자바 데이터 구조는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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