C\#각종 집합 집합
평소에 업무 중 에 List
Array
Array:메모리 에 연속 으로 분 배 됩 니 다.(길 이 를 정의 할 수도 있 고 길 이 를 정의 하지 않 을 수도 있 습 니 다.)Array 의 요소 유형 은 같 아야 합 니 다.
Array 는 좌표(색인)를 통 해 접근 하고 읽 기,수정 이 빠 릅 니 다-삭제 가 느 립 니 다.
Array 가 길 이 를 정의 하면 데이터 항목 이 Array 의 길이 범 위 를 초과 할 수 없습니다.
ArrayList
Array List:길이 가 정 해 지지 않 고 연속 으로 분 배 된
// object ,
ArrayList arrayList = new ArrayList();
arrayList.Add("object");// string
arrayList.Add(Enumerable.Range(1,100).ToArray());// Array
Func<string, int> func = m => 1;
arrayList.Add(func);// Delegate
//
arrayList.RemoveAt(0);//
arrayList.Remove("object");// ,
ListList:또한 Array 입 니 다.메모리 에 연속 으로 놓 여 있 습 니 다.길지 않다범 형,유형 안전 확보,포장 분해 방지(모두 통 일 된 유형)
var list = new List<int>() { 1, 2, 3 };
list.Add(1);
list.AddRange(new List<int> { 4, 5, 6 });//
list.Any();//
list.Clear();//
list.ForEach((m) => { });//foreach , =>viod
list.Skip(1).Take(2);// 0
//... ...
위의 세 가 지 는 모두 Array 형식 에 속 합 니 다.Array 형식 이 라면 읽 기 가 빠 르 고(색인 을 통 해 접근 할 수 있 습 니 다),추가 삭제 가 느 립 니 다.LinkedList
LinkedList:양 방향 링크 요소 가 연속 적 으로 분배 되 지 않 고 모든 요 소 는 전후 노드 를 기록 합 니 다.
//
LinkedList<int> list = new LinkedList<int>();
list.AddLast(1);
list.AddFirst(1);
bool isBool = list.Contains(1);// 1
LinkedListNode<int> list1 = list.Find(123);// 123
list.AddBefore(list1, 0);//
list.AddAfter(list1, 0);//
list.Remove(1);
list.Remove(list1);//
list.RemoveFirst();
list.RemoveLast();
list.Clear();
링크 는 요소 색인 을 통 해 접근 할 수 없습니다.원 소 를 찾 으 려 면 옮 겨 다 닐 수 밖 에 없다.추가 삭제 가 빠 르 고 증가 하거나 삭제 합 니 다.이 요소 의 앞 뒤 두 요소 가 가리 키 는 요소 노드 만 바 꾸 면 됩 니 다.
Queue
Queue 대기 열,바로 링크 입 니 다. 먼저 나가다
// ; A ,B
Queue<string> queue = new Queue<string>();
queue.Enqueue("object");//
queue.Enqueue("object1");
foreach (var item in queue)
{
Console.WriteLine(item);
}
queue.Dequeue();// ,
queue.Peek();//
StackStack:스 택 도 링크 입 니 다.먼저 나 온 후에 먼저 생 긴 데 이 터 를 마지막 으로 사용 합 니 다.
Stack<string> stack = new Stack<string>();
stack.Push("object");//
stack.Push("object1");
stack.Pop();//
stack.Peek();//
C\#중(스 레 드)스 택 의 메모리 방출 도 마찬가지 입 니 다.먼저 실례 화 된 대상 을 마지막 으로 방출 합 니 다.(스 택 에서 설명 한 변수,가장 먼저 설명 한 마지막 GC)배열 과 링크 목록(LinkedList,Queue,Stack)은 그들의 메모리 분배 의 본질 로 구분 되 고 요소 의 연속 분배 와 불 연속 분배 이다.
유형 집합 설정
HashSet
HashSet:hash 분포,요소 간 괜찮아(전후 노드 를 기록 하지 않 아 도 됨),동적 증가.
HashSet<string> hashSet = new HashSet<string>();
hashSet.Add("object1");//
hashSet.Add("object2");
hashSet.Add("object3");
hashSet.Add("object1");//
int count = hashSet.Count;//
hashSet.Contains("object");
HashSet<string> hashSet1 = new HashSet<string>();
hashSet1.Add("object1");
hashSet1.Add("object2");
hashSet1.Add("object4");
hashSet1.SymmetricExceptWith(hashSet);// : hashSet1 hashSet
hashSet1.UnionWith(hashSet);// :hashSet1 hashSet
hashSet1.ExceptWith(hashSet);// :hashSet1 hashSet
hashSet1.IntersectWith(hashSet);// :
hashSet1.ToList();
hashSet1.Clear();
SortedSet정렬 집합:정렬 집합 무 거 운+정렬.orted Set 도 교 차 를 하고 보충 할 수 있 습 니 다.
//IComparer<T>? comparer ,
SortedSet<string> sortedSet = new SortedSet<string>();
sortedSet.Add("object1");
sortedSet.Add("object2");
sortedSet.Add("object1");//
int count = sortedSet.Count;
sortedSet.Contains("object1");
해시 테이블(key-value)형식 집합Hashtable:
키 를 들 고 메모리 주 소 를 계산 한 다음 키-value 를 넣 으 세 요.길이 가 일정 하지 않 아 동적 으로 증가 할 수 있 습 니 다.넣 은 것 은 모두 object 형식 이기 때문에 포장 하고 상 자 를 뜯 는 것 을 피 할 수 없습니다.
// key , +1,
// , key , +1 // ,
// ,
Hashtable hashtable = new Hashtable();
hashtable.Add("key", "value");
hashtable[111] = 222;//KEY,VALUE
foreach (DictionaryEntry item in hashtable)
{
Console.WriteLine(item.Key.ToString());
Console.WriteLine(item.Value.ToString());
}
//
Hashtable.Synchronized(hashtable);// ,
Dictionary:범 형 버 전의 HashTable 에 해당 합 니 다.데이터 가 범 형 을 바탕 으로 포장 및 분해 소 모 를 줄 였 기 때 문 입 니 다.
Dictionary<int, string> pairs = new Dictionary<int, string>();
pairs.Add(1, "object1");
pairs[2] = "object2";
foreach (var item in pairs)
{
Console.WriteLine(item.Key.ToString(), item.Value);
}
pairs.ContainsKey(1);// key
//... ...
SortedDictionary:사전 을 정렬 하고 key 에 따라 정렬 합 니 다.정렬 해 야 하기 때문에 삭제 가 느 려 지고 정렬 이 하나 더 생 겼 습 니 다.
SortedDictionary<int, string> pairs = new SortedDictionary<int, string>();
// key
pairs.Add(1, "object1");
pairs.Add(2, "object2");
pairs.Add(3, "object3");
pairs.Add(4, "object4");
SortedList: 또한 key,value 형식,자동 정렬 입 니 다.중복 추가 할 수 없습니다.key 중복 은 잘못 보 고 됩 니 다.
IComparer comparer 사용자 정의 대상 을 정렬 하려 면 이 로 지정 하 십시오
SortedList sortedList = new SortedList();
sortedList.Add("2", "1");
var keyList = sortedList.GetKeyList();
var valueList = sortedList.GetValueList();
sortedList.TrimToSize();//
sortedList.Remove("1");// key
sortedList.RemoveAt(0);//
sortedList.Clear();//
( ),
ConcurrentQueue Queue
ConcurrentStack Stack
ConcurrentBag (List )ConcurrentBag
ConcurrentDictionary Dictionary
BlockingCollection
ArrayList 와 List 는 모두 IList 인 터 페 이 스 를 실현 하여 색인 을 통 해 요 소 를 방문 할 수 있 습 니 다.링크 와 같이 색인 을 통 해 요 소 를 방문 할 수 없습니다.그러나 링크 의 이러한 집합 은 ICollection 유형의 인 터 페 이 스 를 계승 하기 때문에 집합 할 수 있 는 길이(길이 가 일정 하지 않 은 집합 은 모두 ICollection 인 터 페 이 스 를 계승 합 니 다)
IEnumerable\ICollection\IList\IQueryable
인 터 페 이 스 는 표지 기능 이다.서로 다른 인 터 페 이 스 를 뜯 는 것 은 바로 인터페이스 격 리 를 위 한 것 이다.서로 다른 인 터 페 이 스 를 실현 하 는 것 은 이 집합 기능 이 다르다 는 것 을 나타 낸다.
모든 데이터 집합 은 IEnumerable 을 실현 합 니 다.IEnumerable 은 서로 다른 데이터 구조(각종 집합)에 통 일 된 데이터 접근 방식(foreach)=교체 기 모드 를 제공 합 니 다.
이상 은 C\#각종 집합 집합의 상세 한 내용 입 니 다.c\#집합 에 관 한 자 료 는 우리 의 다른 관련 문장 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.