📜  C#中SortedList和SortedDictionary的区别(1)

📅  最后修改于: 2023-12-03 14:59:43.939000             🧑  作者: Mango

C#中SortedList和SortedDictionary的区别

在C#中,SortedListSortedDictionary都是用于按键排序的集合类。虽然它们都实现了IDictionaryICollection接口,但在实现上还是有一些区别的。

SortedList

SortedList是一个基于数组的实现,它对其内部的元素进行排序,可以通过二分搜索快速查找元素。它的键必须是唯一的,如果尝试将一个已经存在的键添加到列表中,将会抛出一个ArgumentException异常。以下是一些SortedList的特性:

  • 非泛型集合
  • 可根据键进行线性查找、二分查找和范围查找
  • 键必须是唯一的,否则会抛出异常
  • 可以通过Capacity属性设置初始容量
  • 当添加或移除元素时,元素的索引位置可能会发生变化

以下是示例代码:

SortedList sortedList = new SortedList();
sortedList.Add(3, "three");
sortedList.Add(1, "one");
sortedList.Add(2, "two");
foreach (var key in sortedList.Keys)
{
    Console.WriteLine(sortedList[key]);
}
// 输出:
// one
// two
// three
SortedDictionary

SortedDictionary是一个基于红黑树的实现,它的键也必须是唯一的,否则会抛出ArgumentException异常。与SortedList不同的是,它不是按索引访问元素而是按键访问元素,因此它的查找速度比SortedList更快。以下是一些SortedDictionary的特性:

  • 泛型集合
  • 基于红黑树的实现,可快速查找元素
  • 键必须是唯一的,否则会抛出异常
  • 可以通过Capacity属性设置初始容量
  • 当添加或移除元素时,元素的索引位置不会发生变化

以下是示例代码:

SortedDictionary<int, string> sortedDict = new SortedDictionary<int, string>();
sortedDict.Add(3, "three");
sortedDict.Add(1, "one");
sortedDict.Add(2, "two");
foreach (var key in sortedDict.Keys)
{
    Console.WriteLine(sortedDict[key]);
}
// 输出:
// one
// two
// three
总结

虽然SortedListSortedDictionary都是基于键排序的集合类,但它们实现上还是有一些区别的。SortedList基于数组实现,适用于需要频繁访问元素的场景;SortedDictionary基于红黑树实现,适用于需要频繁添加或移除元素的场景。所以,在选择使用哪个集合类时,应该根据实际场景进行选择。