1、SortedList定义

System.Collections.SortedList类表示键/值对的集合,这些键值对按键排序并可按照键和索引访问。SortedList 在内部维护两个数组以存储列表中的元素;即,一个数组用于键,另一个数组用于相关联的值。每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能为null,但值可以。

2.优点

1、SortedList 允许通过相关联键或通过索引对值进行访问,可提供更大的灵活性。

2、可根据需要自动增大容量。

3. SortedList的构造器

构造器函数

注释

SortedList ()

初始化 SortedList 类的新实例,该实例为空、具有默认初始容量并根据 IComparable 接口(此接口由添加到 SortedList 中的每个键实现)进行排序。

SortedList (IDictionary)

初始化 SortedList 类的新实例,该实例包含从指定字典复制的元素、具有与所复制的元素数相同的初始容量并根据由每个键实现的 IComparable 接口排序。

SortedList (Int32)

初始化 SortedList 类的新实例,该实例为空、具有指定的初始容量并根据 IComparable 接口(此接口由添加到 SortedList 中的每个键实现)进行排序。

4、SortedList的属性

属性名

注释

Count

获取 SortedList 中包含的元素数。

IsFixedSize

获取一个值,该值指示 SortedList是否具有固定大小。

IsReadOnly

获取一个值,该值指示 SortedList是否为只读。

Keys

获取包含 SortedList中的键集合

Values

获取包含 SortedList中的值的 集合

Capacity

获取或设置 SortedList 的容量。

5. SortedList的方法

方法名

注释

Void Add(object key,object value)

将带有指定键和值的元素添加到 SortedList

Void Clear()

从 SortedList 中移除所有元素。

Bool Contains(object key)

确定 SortedList 是否包含特定键。

Bool ContainsKey(object key)

确定 SortedList 是否包含特定键。

Bool ContainsValue(object value)

确定 SortedList 是否包含特定值。

Void Remove(object key)

从 SortedList 中移除带有指定键的元素。

Void CopyTo(Array ar,int index)

将 SortedList 元素复制到一维 Array 实例中的指定索引位置。

Clone()

创建 SortedList的浅表副本。

Object GetKey(int index)

获取 SortedList 的指定索引处的键。

Object GetByIndex(int index)

获取 SortedList 的指定索引处的值。

IDictionaryEnumerator GetEnumerator()

返回循环访问 SortedList 的 IDictionaryEnumerator

IList GetKeyList()

获取 SortedList 中的键。

IList GetValueList()

获取 SortedList 中的值。

Int IndexOfKey(object key)

返回 SortedList 中指定键的从零开始的索引。

Int IndexOfValue(object value)

返回指定的值在 SortedList 中第一个匹配项的从零开始的索引。

Void RemoveAt(int index)

移除 SortedList 的指定索引处的元素。

Void SetByIndex(int index,object value)

替换 SortedList 中指定索引处的值。

Void TrimToSize()

将容量设置为 SortedList 中元素的实际数目。

6、SortedList的使用示例

public class TestSortedList
{
public static void Main()
{ // 创建一个SortedList对象
SortedList mySL = new SortedList();
mySL.Add("First", "Hello");
mySL.Add("Second", "World");
mySL.Add("Third", "!");
//列举SortedList的属性、键、值
Console.WriteLine("mySL");
Console.WriteLine(" Count: {0}", mySL.Count);
Console.WriteLine(" Capacity: {0}", mySL.Capacity);
Console.WriteLine(" Keys and Values:");
PrintIndexAndKeysAndValues(mySL); #region SortedList获得键、值列表
SortedList mySL1 = new SortedList();
mySL1.Add(1.3, "fox");
mySL1.Add(1.4, "jumped");
mySL1.Add(1.5, "over");
mySL1.Add(1.2, "brown");
mySL1.Add(1.1, "quick");
mySL1.Add(1.0, "The");
mySL1.Add(1.6, "the");
mySL1.Add(1.8, "dog");
mySL1.Add(1.7, "lazy"); //获得指定索引处的键和值
int myIndex = 3;
Console.WriteLine("The key at index {0} is {1}.", myIndex, mySL1.GetKey(myIndex));
Console.WriteLine("The value at index {0} is {1}.", myIndex, mySL1.GetByIndex(myIndex)); // 获得SortedList中的键列表和值列表
IList myKeyList = mySL1.GetKeyList();
IList myValueList = mySL1.GetValueList(); // Prints the keys in the first column and the values in the second column.
Console.WriteLine("\t-KEY-\t-VALUE-");
for (int i = 0; i < mySL1.Count; i++)
Console.WriteLine("\t{0}\t{1}", myKeyList[i], myValueList[i]); #endregion #region 为SortedList中的元素重新赋值
// Creates and initializes a new SortedList.
SortedList mySL2 = new SortedList();
mySL2.Add(2, "two");
mySL2.Add(3, "three");
mySL2.Add(1, "one");
mySL2.Add(0, "zero");
mySL2.Add(4, "four"); // 打印显示列表的键和值
Console.WriteLine("The SortedList contains the following values:");
PrintIndexAndKeysAndValues(mySL2); // 获得指定键的索引
int myKey = 2;
Console.WriteLine("The key \"{0}\" is at index {1}.", myKey, mySL2.IndexOfKey(myKey)); // 获得指定值的索引
String myValue = "three";
Console.WriteLine("The value \"{0}\" is at index {1}.", myValue, mySL2.IndexOfValue(myValue)); // 重新设置指定索引处的值
mySL2.SetByIndex(3, "III");
mySL2.SetByIndex(4, "IV"); //打印显示列表的键和值
Console.WriteLine("After replacing the value at index 3 and index 4,");
PrintIndexAndKeysAndValues(mySL2);
#endregion Console.ReadKey(); } //打印SortedList中的键和值
public static void PrintIndexAndKeysAndValues(SortedList myList)
{
Console.WriteLine("\t-INDEX-\t-KEY-\t-VALUE-");
for (int i = 0; i < myList.Count; i++)
{
Console.WriteLine("\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i));
}
Console.WriteLine();
} }

7.备注

1、SortedList 的容量是 SortedList 可以保存的元素数。SortedList 的默认初始容量为 0。随着元素添加到 SortedList 中,在需要时可以通过重新分配自动增加容量。可通过调用 TrimToSize方法 或通过显式设置 Capacity 属性减少容量。

2、SortedList 中不允许重复键。

3、SortedList的索引顺序基于排序顺序。当添加元素时,元素将按正确的排序顺序插入 SortedList,同时索引会相应地进行调整。当移除元素时,索引也会相应地进行调整。因此,当在 SortedList 中添加或移除元素时,特定键/值对的索引可能会更改。

4.当不向集合中添加新元素,则调用TrimToSize方法可用于最小化集合的内存开销。

5、通过设置 SortedList 中不存在的键值(例如,myCollection["myNonexistentKey"] = myValue),还可以使用 Item 属性添加新元素。但是,如果指定的键已经存在于 SortedList 中,则设置 Item 属性将改写旧值。相比之下,Add 方法不修改现有元素。

键不能为 空引用(在 Visual Basic 中为 Nothing),但值可以。若要区分由于未找到指定键而返回的 空引用(在 Visual Basic 中为 Nothing) 和由于指定键的值为 空引用(在 Visual Basic 中为 Nothing) 而返回的 空引用(在 Visual Basic 中为 Nothing),请使用 Contains 方法或 ContainsKey 方法确定列表中是否存在该键。

SortedList的用法的更多相关文章

  1. LinkedList,SortedList 基本用法

    LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList<int> ma = new LinkedList<int>(); ...

  2. System.Collections.Generic的各容器类的用法

    演示System.Collections.Generic的各容器类的用法. 包括:Dictionary,KeyValuePair,SortedDic tionary,SortedList,HashSe ...

  3. [转] Java中ArrayList类的用法

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  4. .net在arraylist用法

    1.什么是ArrayListArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本号,它提供了例如以下一些优点: 动态的添加和降低元素 实现了ICollection和IL ...

  5. Java学习之路:ArrayList用法

    1.什么是ArrayList     ArrayList是一个动态数组传奇,使用MSDN声明.那是,Array复杂的版本号,它具有以下优点,例如: 动态的添加和降低元素 实现了ICollection和 ...

  6. Java中ArrayList类的用法

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  7. C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能

    .Net为我们提供了众多的泛型集合.比如,Stack<T>先进后出,Queue<T>先进先出,List<T>集合元素可排序,支持索引,LinkedList<T ...

  8. java中Redis5大基本类型的用法

    存储格式 基本用法 通过Jedis(封装了redis的Java客户端)对redis进行操作. Jedis工具类 public class JedisPoolUtil { private static ...

  9. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

随机推荐

  1. JAVA中使用Redis

    上节讲解了如何在centos上安装redis,点击查看.本节我们学习在java中使用redis.需要将jedis-*.jar添加到classpath(点击下载),如果使用连接池还需要commons-p ...

  2. 机器人api(图灵机器人)

    图灵机器人,是基于自然语言解析的智能机器人,已经免费开放了机器人api接口,有需求的同学能够去试试. 图灵机器人官网:http://www.tuling123.com 图灵机器人体验:http://w ...

  3. PHP工具下载地址

    Zend Debugger下载地址:http://www.zend.com/en/products/studio/downloads 需要先注册一下,然后才能进行下载.

  4. python中的对象拷贝

    python中.进行函数參数传递或者返回值时,假设是一般的变量,会拷贝传递.假设是列表或字典则是引用传递.那python怎样对列表和字典进行拷贝传递呢:标准库的copy模块提供了两个方法:copy和d ...

  5. Android ListFragment实例Demo(自己定义适配器)

    上一篇文章介绍了ListFragment,当中的ListView并没有自己定义适配器,实际上在实际开发中常会用到自己定义适配器,是实现更复杂的列表数据展示. 所以这篇文章添加了自己定义适配器.来进行L ...

  6. GoogleProgressBar

    https://github.com/jpardogo/GoogleProgressBar

  7. Java中字符流与字节流的区别

    字符流处理的单元为2个字节的Unicode字符,分别操作字符.字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组.所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单 ...

  8. Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置

    QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有m ...

  9. Android(java)学习笔记143:android提供打开各种文件的API接口:setDataAndType

    android 打开各种文件(setDataAndType) private void openFile(File file){ Intent intent = new Intent(); inten ...

  10. WPF Command命令模式

    //定义接口 public interface IView { bool IsChanged { get; set; } void SetBinding(); void Clear(); } //定义 ...