SortedDictionary和SortedList】的更多相关文章

使用上两者的接口都类似字典,并且SortedList的比如Find,FindIndex,RemoveAll常用方法都没提供. 数据结构上二者差异比较大,SortedList查找数据极快,但添加新元素,删除元素较慢,SortedDictionary查找,添加,删除速度都比较平均. 博友的测试结果: 直接在Unity3D里测一下 public class Test : MonoBehaviour { void Start() { var sortedDict = new SortedDictiona…
我们先看Hashtable. MSDN的解释:表示键/值对的集合,这些键/值对根据键的哈希代码进行组织. Hash算法是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不 同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值. Hashtable 对象由包含集合元素的存储桶组成.存储桶是 Hashtable 中各元素的虚拟子组,与大多数集合中进行的搜索和检…
msdn叙述:The SortedDictionary<TKey, TValue> generic class is a binary search tree with O(log n) retrieval, where n is the number of elements in the dictionary. In this, it is similar to the SortedList<TKey, TValue> generic class. The two classes…
无论是常用的List<T>.Hashtable还是ListDictionary<TKey,TValue>,在保存值的时候都是无序的,而今天要介绍的集合类SortedList和SortedList<TKey,TValue>在保存值的时候是有序保存. SortedList之二分查找法 一个集合有序,意味着什么?意味着可以利用一些算法来提高遍历集合时的效率,最常见的就是运用二分查找法,SortedList集合的核心就是运用二分查找. SortedList保存数据时和哈希表一样…
一.概述 表示Key/Value集合,可以添加删除元素,允许按Key来访问元素.是Hashtable的泛型等效类. 它需要一个相等实现来确定键是否相等,可以使用实现了IEqualityComparer<T>的构造函数:如果不指定,默认使用IEqualityComparer<T>.Default.如果Tkey的类型实现了IEuatable<T>,默认相等比较器则会使用该实现. 二.声明及初始化 1.可带初始容量 Dictionary<Tkey,TValue>…
1:如何使用 1:点击下载:.NET可视化调试工具 (更新于2016-12-29 19:11:00) (终于彻底兼容了部分VS环境下无法使用的问题) 2:解压RAR后执行:CYQ.VisualierSetup.exe 成功后关掉提示窗口即可. PS:一次运行,支持各个VS版本,终身提高调试的效率,而且没任何副作用. 2:开源及后续升级地址: 开源地址:http://code.taobao.org/svn/cyqopen/trunk/CYQ.Visualizer/ 后续升级获取地址:https:/…
1:如何使用 1:点击下载:.NET可视化调试工具 (更新于2016-11-05 20:55:00) 2:解压RAR后执行:CYQ.VisualierSetup.exe 成功后关掉提示窗口即可. PS:一次运行,支持各个VS版本,终身提高调试的效率,而且没任何副作用. 2:开源及后续升级地址: 开源地址:http://code.taobao.org/svn/cyqopen/trunk/CYQ.Visualizer/ 后续升级获取地址:https://github.com/cyq1162/cyqd…
大多数集合都在System.Collections,System.Collections.Generic两个命名空间.其中System.Collections.Generic专门用于泛型集合. 针对特定类型的集合类型位于System.Collections.Specialized;命名空间: 线程安全的集合类位于System.Collections.Concurrent;命名空间. 下面是集合和列表实现的接口如下: 一.列表 [Serializable] [DebuggerTypeProxy(t…
大多数集合都在  System.Collections,System.Collections.Generic两个命名空间. 其中System.Collections.Generic专门用于泛型集合. 针对特定类型的集合类型位于System.Collections.Specialized;命名空间: 线程安全的集合类位于System.Collections.Concurrent;命名空间. 下面是集合和列表实现的接口如下: 一.列表 [Serializable] [DebuggerTypeProx…
大多数集合都在System.Collections,System.Collections.Generic两个命名空间.其中System.Collections.Generic专门用于泛型集合. 针对特定类型的集合类型位于System.Collections.Specialized;命名空间: 线程安全的集合类位于System.Collections.Concurrent;命名空间. 下面是集合和列表实现的接口如下: 一.列表 [Serializable] [DebuggerTypeProxy(t…
KoobooJson - 更小更快的C# JSON序列化工具(基于表达式树构建) 在C#领域,有很多成熟的开源JSON框架,其中最著名且使用最多的是 Newtonsoft.Json ,然而因为版本迭代,其代码要兼容从net2.0到现在的最新的net框架,并且要支持.net平台下的其它语言,所以最新发布版本的Newtonsoft.Json其dll大小接近700k,另一方面,因为其复杂的迭代历史导致它的代码为了维护向下扩展性和向上兼容性而舍弃一些性能. 如果你不太在乎体积和性能的话,那么 Newto…
List 集合类是顺序线性表,Add操作是O(1)或是O(n)的,由于List的容量是动态扩容的,在未扩容之前,其Add操作是O(1),而在需要扩容的时候,会拷贝已存在的那些元素同时添加新的元素,此时的Add操作是O(n)的.而对于Contains方法,其是按照线性检索的,其复杂度是O(n).而BinarySearch方法,其是按二分查找的,其复杂度是O(lg n). SortedList集合类是有序线性表,Add操作是O(n),       其Contains方法是通过二分查找检索元素的,因此…
集 饱含不重复元素的集合称为”集(set)”. .NET4包含两个集(HashSet<T>和SortedSet<T>),他们都实现ISet<T>接口.HashSet<T>即包含不重复元素的无序列表,SortedSet<T>集包含不重复元素的有序列表. ISet<T>接口提供的方法可以创建合集,交集,或者给出一个集合时另一个集的超集或子集的信息. 案例: //使用HashSet:重复的元素自动被移除,但是不排序 var set = ne…
如题,C#  实现简单的二叉堆的 Push() 和 Pop(), 如有不足欢迎指正. 另外,在C#中使用 Heap 的相似功能可以考虑使用:Priority Queues,SortedDictionary,SortedList . using System; using System.Collections.Generic; namespace LeetCode.BaseClass { public enum HeapType { MinHeap, MaxHeap } public class…
C# 中主要有两类容器:一个是 System.Array 类(参阅:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemarrayclasstopic.asp),类似 STL 中的 Vector:另一类是集合.集合还可以细分成功能不同的几个容器. C# 1.0 的集合类的容器全部在 System.Collections 名字空间下.(参阅:http://msdn2.micro…
微软在 .NET 3.5 新增了一个 HashSet 类,在 .NET 4 新增了一个 SortedSet 类. .NET Collection 函数库的 HashSet.SortedSet 这两个泛型的类,都实现了 System.Collections.Generic.ISet 接口. 参见如下示例: var set = new HashSet<int>() { 5, 9, 2, 1, 2, 2, 3, 7, 4, 9, 9 };foreach (int element in set)   …
c# 容器类简介   C# 中主要有两类容器:一个是 System.Array 类(参阅:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemarrayclasstopic.asp),类似 STL 中的 Vector:另一类是集合.集合还可以细分成功能不同的几个容器. C# 1.0 的集合类的容器全部在 System.Collections 名字空间下.(参阅:http://…
List 集合类是顺序线性表,Add操作是O(1)或是O(n)的,由于List的容量是动态扩容的,在未扩容之前,其Add操作是O(1),而在需要扩容的时候,会拷贝已存在的那些元素同时添加新的元素,此时的Add操作是O(n)的.而对于Contains方法,其是按照线性检索的,其复杂度是O(n).而BinarySearch方法,其是按二分查找的,其复杂度是O(lg n). SortedList集合类是有序线性表,Add操作是O(n), 其Contains方法是通过二分查找检索元素的,因此复杂度是O(…
数组的大小是固定的.如果元素个数动态,就使用集合类. List<T>是与数组相当的集合类.其他的集合:队列.栈.链表.字典和集. .NET Framework 1.0 包括非泛型集合类,如 ArrayList 和 HashTable . 创建List List<int> list = new List<int>(); 使用默认构造函数创建一个空列表.如果列表添加元素后,容量会扩大为 4 个元素.如果添加 第 5 个元素,容量为 8 . 如果列表的容量改变了,整个集合就要…
HashTable数据结构存在问题:空间利用率偏低.受填充因子影响大.扩容时所有的数据需要重新进行散列计算.虽然Hash具有O(1)的数据 检索效率,但它空间开销却通常很大,是以空间换取时间.所以Hashtable适用于读取操作频繁,写入操作很少的操作类型.一般用在多线程操作中,不需 要加锁. Dictionary<TKey, TValue> 会在内部维护一个链表数组.对于这个链表数组 L0,L1,...,LM-1, 散列函数将告诉我们应当把元素 X 插入到链表的什么位置.然后在 find 操…
就我个人觉得Dictionary, SortedDictionary, SortedList 这几个类的使用是比较简单的,只要稍微花点时间在网上查找一点资料,然后在阅读以下源码就理解的很清楚了.为什么要写这一片文章了,看一下code吧: Dictionary<int, object> dict = new Dictionary<int, object>(); //load data to dict int key = 1; object obj = null; if (dict.C…
对一个Dictionary<TKey, TValue>进行键排序可以直接用SortedDictionary SortedDictionary<TKey, TValue> 泛型类是检索运算复杂度为 O(log n) 的二叉搜索树,其中 n 是字典中的元素数. 就这一点而言,它与 SortedList<TKey, TValue> 泛型类相似. 这两个类具有相似的对象模型,并且都具有 O(log n) 的检索运算复杂度. 这两个类的区别在于内存的使用以及插入和移除元素的速度:…
SortedList 类 [C#] 命名空间: System.Collections 表示键/值对的集合,这些键和值按键排序并可按照键和索引访问. SortedList 是 Hashtable 和 Array 的混合.当使用 Item 索引器属性按照元素的键访问元素时,其行为类似于 Hashtable.当使用 GetByIndex 或 SetByIndex 按照元素的索引访问元素时,其行为类似于 Array. SortedList 在内部维护两个数组以将数组存储到列表中:即,一个数组用于键,另一…
都是集合类,C#中同属命名空间System.Collections,“用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写:value用于存储对应于key的值”.不允许重复键.两者使用方法有很多类似之处. 在存储上,当把某个元素添加到HashTable时,将根据键的哈希代码将该元素放入存储桶中(意味着并不会按照存入顺序读取,表面看来是随机的排列的,但事实上有其算法),由于是散列算法所以会出现一个哈希函数能够为两个不同的键生成相同的哈希代码,该键的后续查…
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace ConsoleTest { class Program { static void Main(string[] args) { List<string> listTest = new List<string>(); ; i &l…
  6.1.DictionaryBase 类的基础方法和属性 大家可以把字典数据结构看成是一种计算机化的词典.要查找的词就是关键字,而词的定义就是值. DictionaryBase 类是一种用作专有字典实现基础的抽象( MusInherit)类. 存储在字典中的键值对实际上是作为 DictionaryEntry 对象来存储的. DictionaryEntry 结构提供了两个域,一个用于关键字而另一个用于值.在这个结构中所要关注的只是 Key 属性和 Value 属性这两个属性(或方法).当把键值…
C#分别在集合库和泛型库中有共2套SortedList 以较新的泛型库为例,SortedList<int, string> l = new SortedList<int, string>(); l.Add(5,"fifth"); l.Add(2, "second"); l.Add(3, "third"); l.Add(1, "first"); l.Add(4, "fourth");/…
起初想用SortedDictionary做游戏中的排行榜,代码如下: using UnityEngine; using System; using System.Collections; using System.Collections.Generic; public class CustomComparer<T> : IComparer<T> { Func<T, T, int> mComparerFunc; public CustomComparer(Func<…
使用过Dictionary的人都知道,当每一个Add里面的值都不会改变其顺序,所以需要需要对其排序的时候就用到SortedDictionary, 但SortedDictionary并不是那么理想,其默认的方式只支持正序排序,想要反序排序时必须得靠自己重新编写代码,下面来看一个简单的例子: private void TestDictionarySort() { SortedDictionary<string, string> sd = new SortedDictionary<string…
1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法用于将对象添加到 ArrayList 的结尾处:Remove方法用于从 ArrayList 中移除特定对象的第一个匹配项:RemoveAt方法用于移除 ArrayList 的指定索引处的元素:Insert方法用于将元素插入 ArrayList 的指定索引处. 示例 ArrayList的使用 示例将介…