C#中SortedList类的使用
C#中SortedList类
命名空间:System.Collections
程序集:mscorlib(在mscorlib.dll中)
语法:public class SortedList : IDictionary, ICollection, IEnumerable, ICloneable
构造函数:
1. SortedList()
初始化 SortedList 类的新实例。该实例为空、具有默认初始容量并依据 IComparable 接口(此接口由加入到 SortedList 中的每一个键实现)进行排序
例:
SortedList mySL1 = new SortedList();
2. SortedList (IComparer)
初始化 SortedList 类的新实例,该实例为空、具有默认初始容量并依据指定的 IComparer 接口进行排序。
依据指定的 IComparer 实现对元素进行排序。
假设 comparer 为 空引用(在 Visual Basic 中为 Nothing),则会使用每一个键的 IComparable 实现。因此,每一个键必须实现 IComparable 接口,以便可以与 SortedList 中的其它每一个键进行比較。
SortedList 的容量是 SortedList 能够保存的元素数。向 SortedList 加入元素时,将通过又一次分配内部数组,依据须要自己主动增大容量。
假设能够预计集合的大小。那么当指定初始容量后,将无需在向 SortedList 中加入元素时运行大量的大小调整操作。
此构造函数的运算复杂度为 O(1)。
例:
SortedList mySL2 = new SortedList(new CaseInsensitiveComparer());
3. SortedList (IDictionary)
初始化 SortedList 类的新实例,该实例包括从指定字典复制的元素、具有与所复制的元素数同样的初始容量并依据由每一个键实现的 IComparable 接口排序。
每一个键必须实现 IComparable 接口。以便可以与 SortedList 中其它每一个键进行比較。
依据加入到 SortedList 的每一个键的 IComparable 实现对元素进行排序。
Hashtable 是能够传递到此构造函数的 IDictionary 实现的一个演示样例。新 SortedList 包括存储在 Hashtable 中的键和值的副本。
SortedList 的容量是 SortedList 能够保存的元素数。向 SortedList 加入元素时,将通过又一次分配内部数组,依据须要自己主动增大容量。
假设能够预计集合的大小。那么当指定初始容量后,将无需在向 SortedList 中加入元素时运行大量的大小调整操作。
此构造函数的运算复杂度为 O(n),当中 n 是 d 中的元素数。
例:
Hashtable myHT = new Hashtable();
myHT.Add("FIRST", "Hello");
myHT.Add("SECOND", "World");
myHT.Add("THIRD", "!");
// Create a SortedList using the default comparer.
SortedList mySL3 = new SortedList(myHT);
4. SortedList (Int32)
初始化 SortedList 类的新实例,该实例为空、具有指定的初始容量并依据 IComparable 接口(此接口由加入到 SortedList 中的每一个键实现)进行排序。
例:
SortedList mySL4 = new SortedList( 3 );
Console.WriteLine("mySL1 (default):");
mySL4.Add("FIRST", "Hello");
mySL4.Add("SECOND", "World");
mySL4.Add("THIRD", "!");
5. SortedList (IComparer, Int32)
初始化 SortedList 类的新实例,该实例为空、具有指定的初始容量并依据指定的 IComparer 接口排序。
例:
SortedList mySL5 = new SortedList(new CaseInsensitiveComparer(), 3);
Console.WriteLine("mySL2 (case-insensitive comparer):");
mySL5.Add("FIRST", "Hello");
mySL5.Add("SECOND", "World");
mySL5.Add("THIRD", "!");
6. SortedList (IDictionary, IComparer)
初始化 SortedList 类的新实例。该实例包括从指定字典复制的元素、具有与所复制的元素数同样的初始容量并依据指定的 IComparer 接口排序。
例:
Hashtable myHT = new Hashtable();
myHT.Add("FIRST", "Hello");
myHT.Add("SECOND", "World");
myHT.Add("THIRD", "!");
SortedList mySL6 = new SortedList(myHT, new CaseInsensitiveComparer());
方法:
1. 加入元素
SortedList mySL = new SortedList();
mySL.Add( "one", "The" );
mySL.Add( "two", "quick" );
mySL.Add( "three", "brown" );
mySL.Add( "four", "fox" );
此时,mySL.Count = 4, mySL.Capacity = 16
2. 清空元素
mySL.Clear();
此时,mySL.Count = 0, mySL.Capacity = 16;
3. 是否包括特定键(ContainsKey)、特定值(ContainsValue)
SortedList mySL = new SortedList();
mySL.Add( 2, "two" );
mySL.Add( 4, "four" );
mySL.Add( 1, "one" );
mySL.Add( 3, "three" );
mySL.Add( 0, "zero" );
int myKey = 2;
bool F1 = mySL.ContainsKey( myKey );
String myValue = "three";
bool F2 = mySL.ContainsValue( myValue );
此时F1为ture,F2为true
4. 获取键(GetByIndex)、值(GetKey)
SortedList mySL = new SortedList();
mySL.Add( 1.3, "fox" );
mySL.Add( 1.4, "jumped" );
mySL.Add( 1.5, "over" );
mySL.Add( 1.2, "brown" );
mySL.Add( 1.1, "quick" );
mySL.Add( 1.0, "The" );
mySL.Add( 1.6, "the" );
mySL.Add( 1.8, "dog" );
mySL.Add( 1.7, "lazy" );
int myIndex=3;
Console.WriteLine( "The key at index {0} is {1}.", myIndex, mySL.GetKey( myIndex ) );
Console.WriteLine( "The value at index {0} is {1}.", myIndex, mySL.GetByIndex( myIndex ) );
此时The key at index 3 is 1.3. The value at index 3 is fox.
*************************************************************************************************
备注
SortedList 元素可通过其键来訪问 (如随意 IDictionary 实现中的元素)。或通过其索引来訪问(如随意 IList 实现中的元素)。
SortedList 在内部维护两个数组以存储列表中的元素;即,一个数组用于键,还有一个数组用于相关联的值。
每一个元素都是一个可作为 DictionaryEntry 对象进行訪问的键/值对。键不能为 空引用(在 Visual Basic 中为 Nothing)。但值能够。
SortedList 的容量是 SortedList 能够保存的元素数。
SortedList 的默认初始容量为 0。
随着元素加入到 SortedList 中,在须要时能够通过又一次分配自己主动添加容量。
可通过调用 TrimToSize 或通过显式设置 Capacity 属性降低容量。
SortedList 的元素将依照特定的 IComparer 实现(在创建 SortedList 时指定)或依照键本身提供的 IComparable 实现并根据键来进行排序。
不论在哪种情况下,SortedList 都不同意反复键。
索引顺序基于排序顺序。
当加入元素时,元素将按正确的排序顺序插入 SortedList。同一时候索引会对应地进行调整。当移除元素时。索引也会对应地进行调整。因此,当在 SortedList 中加入或移除元素时。特定键/值对的索引可能会更改。
因为要进行排序。所以在 SortedList 上操作比在 Hashtable 上操作要慢。可是。SortedList 同意通过相关联键或通过索引对值进行訪问,可提供更大的灵活性。 可使用一个整数索引訪问此集合中的元素。
此集合中的索引从零開始。
C# 语言中的 foreach 语句(在 Visual Basic 中为 for each)须要集合中每一个元素的类型。
因为 SortedList 的每一个元素都是一个键/值对,因此元素类型既不是键的类型,也不是值的类型。而是 DictionaryEntry 类型。
C#中SortedList类的使用的更多相关文章
- 数据结构和算法 – 6.构建字典: DictionaryBase 类和 SortedList 类
6.1.DictionaryBase 类的基础方法和属性 大家可以把字典数据结构看成是一种计算机化的词典.要查找的词就是关键字,而词的定义就是值. DictionaryBase 类是一种用作专有字 ...
- C# SortedList类概念和示例
SortedList 类 [C#] 命名空间: System.Collections 表示键/值对的集合,这些键和值按键排序并可按照键和索引访问. SortedList 是 Hashtable 和 A ...
- C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法 ...
- Python中的类、对象、继承
类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...
- 基础知识(05) -- Java中的类
Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...
- Objective-C中的类目,延展,协议
Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
- C#中timer类的用法
C#中timer类的用法 关于C#中timer类 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Threading.Timer类 ...
随机推荐
- 【DNS】- 域名解析中A记录、CNAME、MX记录、NS记录的区别和联系
1. A记录 又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器.说明:·指向的目标主机地址类型只能使用IP地址: 附加说明: 1) 泛域名解析即将该域名所有 ...
- 【bzoj2306】[Ctsc2011]幸福路径 倍增Floyd
题目描述 一张n个点的有向图,每个点有一个权值.一开始从点$v_0$出发沿图中的边任意移动,移动到路径上的第$i$个点 输入 每一行中两个数之间用一个空格隔开. 输入文件第一行包含两个正整数 n, ...
- [SDOI2015][bzoj3990] 序列 [搜索]
题面 传送门 思路 首先,这道题目有一个非常显然(但是我不会严格证明,只能意会一下)的结论:一个合法的操作序列中,任意两个操作是可以互换的 那么,这个结论加上本题极小的数据范围,为什么不搜索一下呢? ...
- Tomcat学习笔记(九)
Tomcat Session管理 Catalina通过一个称为Session管理器的组件来管理建立Session对象,该组件由org.apache.catalina.Manager接口表示.Sessi ...
- Ubuntu虚拟机编译Android6.0总结
1 前言 昨天使用清华的源下载了android 6.0的源码,校园网可以达到10M的速度,爽!今天一大早就迫不及待地准备编译一个模拟器版本,看看效果,哪知竟然耗费了一整天的时间才搞定...为了避免其他 ...
- 飞思卡尔MC9S12系列单片机地址影射以及分页问题
对于用MCU的人来说,不一定要明白HCS12(x) memory map的机制和联系.因为如果没有系统地学习操作系统和编译原理之类的课程,确实有些难度.并且,对于DG128 XS128这样的MCU,默 ...
- Intel与Motorola区别
Intel低字节在前 Motorola高字节在前 在进行CAN总线通信设计或者测试过 程中,经常看到CAN总线信号的编码格式有两种定义:Intel格式与Motorola格式.究竟两种编码格式有什 ...
- c# 动态调用webservice 转录一下
1. client call method [上线的话也只是需要改一下wsdl地址就可以了] /// <summary> /// 动态webservice调用 /// </sum ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(9)——R600显卡的3D引擎和图形流水线
1. R600 3D引擎 R600核心是AMD一款非常重要的GPU核心,这个核心引入了统一处理器架构,其寄存器和指令集同以前的GPU 都完全不同,对其编程也有比较大的区别. 图1显示了R600 GPU ...
- Linux学习总结—缺页中断和交换技术【转】
三.Linux缺页中断处理 转自:http://blog.csdn.net/cxylaf/article/details/1626534 1.请求调页中断: 进程线性地址空间里的页面不必常驻内存,例如 ...