C\#각종 집합 집합

집합(Collection)클래스 는 데이터 저장 과 검색 에 전문 적 으로 사용 되 는 클래스 입 니 다.이 클래스 들 은 스 택(stack),대기 열(queue),목록(list),해시 표(hash table)에 대한 지원 을 제공 합 니 다.대부분의 집합 류 는 같은 인 터 페 이 스 를 실현 했다.
평소에 업무 중 에 List집합 이 가장 많이 사용 되 고 그 다음은 Array(배열)입 니 다.오늘 은 여러 가지 형식의 집합 을 정리 하고 쉽게 잊 지 않 아 도 됩 니 다.기록 해 야 합 니 다.
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");//        ,     
List
List:또한 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();//      
Stack
Stack:스 택 도 링크 입 니 다.먼저 나 온 후에 먼저 생 긴 데 이 터 를 마지막 으로 사용 합 니 다.

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\#집합 에 관 한 자 료 는 우리 의 다른 관련 문장 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기