Array List 와 (List, LinkedList, 배열) 및 Hastable 과 Dictionary 의 차이 점 및 포장 해제
1. ArrayList 는 동적 배열 을 바탕 으로 하 는 데이터 구 조 를 실현 하고 LinkedList 는 링크 를 바탕 으로 하 는 데이터 구조 이다.
2. 랜 덤 액세스 get (조회) 과 set (수정) 에 대해 ArrayList 는 LinkedList 보다 좋 습 니 다. LinkedList 는 지침 을 이동 해 야 하기 때 문 입 니 다.
3. 추가 및 삭제 작업 add (추가) 와 reove (삭제) 에 대해 서 는 LinekList 가 우세 합 니 다. ArrayList 가 데 이 터 를 이동 해 야 하기 때 문 입 니 다.
Array List 와 List 의 차이 점:
Array List 가 멤버 를 추가 하 는 과정 에서 포장 을 뜯 는 작업 이 발생 할 수 있 습 니 다. 유형 이 다른 값 을 삽입 할 수 있 습 니 다. 그의 전 삼 은 object 형식 이기 때문에 우리 가 가 져 오지 않 으 면 이러한 오 류 를 보고 할 수 있 습 니 다!
List 는 멤버 를 추가 할 때 포장 을 뜯 지 않 고 같은 유형의 값 만 삽입 할 수 있 으 며 유형 안전 을 확보 할 수 있 습 니 다.
ArrayList arrayList=new ArrayList();
arrayList.Add(1); //
List list=new list();
list.Add(1); //
배열 의 장단 점:
int[] ints=new int[2];
ints[0]=2
ints[1]=3
장점: 색인 속도 가 매우 빠 르 고 할당 과 수정 요소 도 간단 하 며 색인 에 따라 대상 을 찾 아 조작 하면 됩 니 다!
단점: 배열 의 두 데이터 사이 에 데 이 터 를 삽입 하 는 것 은 매우 번 거 로 운 일이 고 배열 을 설명 할 때 배열 의 길 이 를 지정 해 야 합 니 다. 배열 의 길이 가 너무 길 면 메모리 낭 비 를 초래 할 수 있 습 니 다.
단락 을 지나 면 데이터 가 넘 치 는 오 류 를 초래 할 수 있다.배열 을 설명 할 때 우 리 는 배열 의 길 이 를 잘 모 르 면 매우 번 거 로 워 질 것 이다.
배열 의 이러한 단점 에 대해 C \ # 에서 가장 먼저 Array List 와 List 대상 을 제공 하여 이러한 단점 을 극복 했다.위 와 같다.
포장 해제:
값 유형: 원래 유형 (Sbyte, Byte, Short, Ushort, Int, Uint, Long, Ulong, Char, Float, Double, Bool, Decimal), 매 거 진 (enum), 구조 (struct) 등 은 스 택 에서 메모 리 를 분배 하고 설명 하 는 동시에 데이터 가 NULL 이 되 지 않도록 초기 화 합 니 다.
인용 유형: 클래스, 배열, 인터페이스, 의뢰, 문자열 등 은 더미 에 메모 리 를 할당 하고 null 로 초기 화 합 니 다. 인용 형 은 GARBAGE COLLECTION 으로 메모 리 를 회수 해 야 합 니 다. 값 형 을 사용 하지 않 고 역할 범 위 를 초과 하면 시스템 이 자동 으로 방출 됩 니 다.
포장: 값 형식 을 인용 형식 으로 변환 하여 쓰레기 수 거 더미 에 저장 하 는 값 형식 입 니 다. 값 형식 이 object 형식 이나 이 값 형식 으로 이 루어 지 는 모든 인터페이스 형식의 암시 적 변환 입 니 다.
뜯 기: 인용 형식 을 값 형식 으로 바 꾸 고 object 형식 에서 값 형식 으로 바 꾸 거나 인터페이스 형식 에서 이 인터페이스의 값 형식 으로 바 꾸 는 명시 적 변환;
포장 및 분리 기능 을 이용 하여 허용 값 형식의 모든 값 과 Object 형식의 값 을 서로 변환 하여 값 형식 과 참조 형식 을 연결 할 수 있 습 니 다.
간략 한 예: using System. Collection;using System.Collections.Generic; using UnityEngine;
public class BoxExample : MonoBehaviour {
int val = 100; // Use this for initialization void Start () { object obj = val; Debug. Log ("포장 과정 (값 형식 을 참조 형식 으로 변환 하 는 과정):" + obj); int num=(int )obj; Debug. Log ("상 자 를 뜯 는 과정 (값 형식 을 인용 형식 으로 바 꾸 고 인용 형식 에서 값 형식 으로 바 꾸 는 과정):" + num); //상 자 를 뜯 은 후의 유형 을 판단 하 다. if (obj is Vector3) { Debug.Log((Vector3 )obj ); } else if (obj is int ) { Debug.Log((int )obj); } } }
Hashtable 과 Dictionary 의 차이 점: (키 쌍)
1: 단일 스 레 드 프로그램 에서 Dictionary 를 사용 하 는 것 을 추천 합 니 다. 일반적인 장점 이 있 고 읽 기 속도 가 빠 르 며 용량 이용 이 충분 합 니 다. 2: 다 중 스 레 드 프로그램 에서 Hashtable 을 사용 하 는 것 을 추천 합 니 다. 기본 적 인 Hashtable 은 단일 스 레 드 기록, 다 중 스 레 드 읽 기, Hashtable 에 대해 Synchronized () 를 추가 로 호출 할 수 있 습 니 다.방법 은 완전 스 레 드 안전 한 유형 을 얻 을 수 있 습 니 다. 그러나 Dictionary 는 스 레 드 안전 이 아니 므 로 lock 문 구 를 사용 하여 보호 해 야 합 니 다. 효율 이 크게 떨 어 집 니 다. 3: Dictionary 는 삽입 순서에 따라 데 이 터 를 배열 하 는 특성 이 있 습 니 다 (주: 그러나 Remove () 를 호출 하여 노드 를 삭제 한 후 순서 가 흐 트 러 집 니 다)따라서 순 서 를 나타 내야 하 는 상황 에서 Dictionary 를 사용 하면 어느 정도 편 의 를 얻 을 수 있 습 니 다. 값 유형 에 대해 서 는 특정 유형 (Object 포함 하지 않 음) 의 Dictionary >) 의 성능 이 Hashtable 보다 좋 습 니 다. 이것 은 Hashtable 요 소 는 Object 유형 에 속 하기 때문에 값 유형 을 저장 하거나 검색 할 때 포장 과 포장 취소 가 발생 합 니 다.
Dictionary 로 상자 분해 작업 을 피 할 수 있 습 니 다.
스 레 드 보안:
Dictionary 는 이 집합 을 수정 하지 않 으 면 여러 개의 리 더 를 동시에 지원 할 수 있 습 니 다. 그럼 에 도 불구 하고 처음부터 끝까지 하나의 집합 을 매 거 하 는 것 은 본질 적 으로 하나의 스 레 드 가 안전 한 과정 이 아 닙 니 다. 매 거 와 쓰기 방문 이 서로 다 투 는 경우 가 극히 드 물 때 전체 매 거 진 과정 에서 집합 을 잠 가 야 합 니 다. 여러 스 레 드 접근 집합 을 허용 하려 면읽 기와 쓰기 동작 을 하려 면 반드시 자신의 동기 화 를 실현 해 야 한다. 스 레 드 보안 에 관 한 다른 정 보 는 ConcurrentDictionary 를 참조 하 십시오. 이 유형의 공공 정적 (Visual Basic 에서 Shared) 구성원 은 스 레 드 가 안전 합 니 다.
HashTable Hashtable 은 스 레 드 가 안전 합 니 다. 여러 개의 리더 스 레 드 와 하나의 기록 스 레 드 로 사용 할 수 있 습 니 다. 다 중 스 레 드 를 사용 할 때 하나의 스 레 드 만 기록 (업데이트) 작업 을 수행 하면 스 레 드 가 안전 합 니 다. 잠 금 되 지 않 은 읽 기 (컴 파 일 러 가 Hashtable 로 정렬 되면) 를 허용 합 니 다.. 여러 개의 컴 파 일 러 를 지원 하려 면 Hashtable 대상 을 읽 는 스 레 드 가 없 으 면 Hashtable 의 모든 작업 을 Synchronized 방법 으로 되 돌려 야 합 니 다. 처음부터 끝까지 하나의 집합 을 매 거 하 는 것 은 본질 적 으로 스 레 드 안전 과정 이 아 닙 니 다. 하나의 집합 이 동기 화 되 었 더 라 도 다른 스 레 드 는 이 집합 을 수정 할 수 있 습 니 다. 매 거 진 과정 에서 스 레 드 안전 을 확보 하려 면 전체 매 거 진 과정 에서 집합 을 잠 그 거나 다른 스 레 드 로 인 한 변경 으로 인 한 스 레 드 를 포착 할 수 있 습 니 다.이상 하 다
1. Dictionary 는 Hash 기술 을 기반 으로 구축 되 었 습 니 다. 이상 적 인 상황 에서 찾기 시간 복잡 도 는 O (1) 2 입 니 다. 프로젝트 실천 상 Dictionary 는 초기 에 삽입 순서 로 배열 되 었 습 니 다. 그러나 MSDN 에 서 는 이 점 을 보장 하지 않 았 습 니 다. 3. Hashtable 은 삽입 순서 로 배열 되 지 않 았 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.