집 >백엔드 개발 >C#.Net 튜토리얼 >C#의 Hashtable 및 Dictionary 코드 예제에 대한 간략한 설명
C#의 Hashtable 및 Dictionary 코드 예제에 대한 간략한 설명:
Dictionary
해시테이블은 일반적이지 않으며 유형에 안전하지 않습니다. 사전은 일반적이고 유형에 안전하지 않습니다.
Hashtable의 키값은 모두 Object형이지만 Dictionary의 키값은 데이터형을 지정할 수 있다.
즉, Hashtable에 Object 이외의 데이터 타입이 저장되어 있는 경우 해당 데이터를 꺼낼 때 타입 변환으로 표시해야 정상적으로 사용할 수 있습니다. 사전에는 이런 문제가 없습니다.
이런 점에서 Hashtable은 Dictionary
Hashtable ht = new Hashtable(); Dictionary<string, int> dic = new Dictionary<string, int>(); ht.Add("A", 1); dic.Add("A", 1); //Console.WriteLine(ht["A"]+1); //编译错误!Object类型不能和int类型直接进行相加。 Console.WriteLine((int)ht["A"] + 1);//编译通过,输出结果为:2 Console.WriteLine(dic["A"] + 1); //编译通过,输出结果为:2
Dictionary와 Hashtable에서 데이터를 읽는 순서와 데이터를 추가할 때의 데이터 순서의 일관성은 보장할 수 없거나 일관성이 없다고 할 수 있습니다.
사전은 추가만 하고 삭제는 하지 않을 때 데이터를 읽는 순서를 일관되게 유지할 수 있습니다.
그러나 삭제 및 추가 작업 후에는 더 이상 데이터를 읽는 순서가 추가할 때의 순서와 동일하다는 보장이 없습니다.
아아아아
Dictionary의 경우 요소를 삭제하면 새로 추가된 요소가 삭제된 요소의 위치를 채우게 되므로 데이터를 추가하는 순서와 데이터를 읽는 순서가 일치하지 않게 됩니다.
Hashtable의 경우 특정 알고리즘에 따라 데이터 저장 순서가 계산되기 때문에 대부분의 경우 데이터를 읽는 순서와 데이터를 추가하는 순서가 일치하지 않습니다.
따라서 데이터 추가 시 순서를 유지해야 한다면 Dictionary와 Hashtable을 사용하지 않는 것이 가장 좋습니다.
Hashtable의 경우 존재하지 않는 Key 값을 사용하여 값을 얻으면 null이 반환됩니다.
Dictionary<int, int> dic = new Dictionary<int, int>(); dic.Add(0, 0); dic.Add(1, 1); dic.Add(2, 2); Console.WriteLine("仅仅经过添加元素处理之后:"); foreach (KeyValuePair<int, int> kvp in dic) { Console.WriteLine("Key:" + kvp.Key + " Value:" + kvp.Value); } dic.Remove(0); dic.Add(3, 3); Console.WriteLine("经过删除和添加元素处理之后:"); foreach (KeyValuePair<int, int> kvp in dic) { Console.WriteLine("Key:" + kvp.Key + " Value:" + kvp.Value); } Console.ReadKey();
사전의 경우 존재하지 않는 키 값을 사용하여 값을 가져오면 "System.Collections.Generic.KeyNotFoundException" 유형의 예외가 발생합니다.
따라서 Dictionary 또는 Hashtable에서 값을 가져올 때 먼저 Key 값이 존재하는지 확인(ContainsKey() 메서드를 사용하여 확인)하여 예기치 않은 값이나 예외가 발생하는 것을 방지할 수 있습니다.
Dictionary는 스레드로부터 안전하지 않고 Hashtable은 스레드로부터 안전합니다.
위 내용은 C#의 Hashtable 및 Dictionary 코드 예제에 대한 간략한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!