Chap 11 Notes
--------------------------
1、 集合:是用于把其他对象组存储在一个单元中的对象,它还提供了许多标准“方法”,一边处理其中包含的对象
2、 .NET Framework提供了许多有效的集合对象,如ArrayList和Hashtable等,都是经常用到的
3、 术语“集合”是指一种特殊的对象,它可以把它其中的其他对象绑定在一起,对它们单独操作或作为一个组来操作。创建集合的时候,可以先创建一个空白的集合对象,以后再添加对象,或根据需要从集合中删除无用的项
4、 系列:集合最简单的类型是没有以特定顺序组合在一起的一组对象,这称为一个系列。在系列当中,内部元素的顺序并不重要
5、 列表:在集合中,对象以特定的顺序存储,这种集合称为列表。可以指定要添加或删除的对象在序列中的位置,列表可以自由扩展或缩小。列表有定义好的顺序,因此其元素就不需要是惟一的
6、 映射集合:以键/值对的方式存储对象,一个对象惟一标识一个键/值对,另一个对象包含要存储的信息(值)。键的规则类似于列表或数组中的下标,因为它惟一标识一个元素。但与下标不同的是,键不需要是整型数,它可以是任何类型的对象
7、 键不可以有重复的,但值可以重复
8、 堆栈:先进后出; 队列:先进先出
9、 可以把一维数组当作预先填充了值的固定列表,因为它具有前面描述的列表集合的所有属性,只是其元素是在创建列表时才初始化的,而且其长度是固定的。一旦定义好了数组,就不能给它添加元素了。可以使用惟一的下标值引用数组中的一个元素。
10、 数组可以使用System.Array类定义的三个主要方法
(1) CreateInstance()——初始化System.Array类的一个新实例
(2) SetValue()——设置指定下标的元素的值
(3) GetValue()——获取指定下标的元素的值
11、 编写数组的代码示例:见Chap11/rm362_animal_array.aspx
12、 在这段代码中应注意:
(1) 出现错误的CreateInstance()方法,为何调试不成功?应该怎么应用?
(2) SetValue()和GetValue()方法的用法
(3) Array.IndexOf(AnimalArray,”Cat”,0) 表示将从第0个元素开始搜索,并返回AnimalArray数组中第一个包含Cat值的元素的下标
13、 搜索数组的代码示例:见Chap11/rm363_array_search.aspx
14、 在这段代码中应注意:
(1) 当数组确定了的时候,Array.LastIndexOf(AnimalArray,”Cat”)的值就是确定的
(2) 注意这里的intCounter的用法
(3) 在显示结果的时候,When <label>,When <div> ?
15、 处理数组中的多个元素,可以主要使用两个“方法”,Reverse()和Sort()
16、 Reverse()的用法:如果需要翻转AnimalArray数组中元素的顺序,可以使用Array.Reverse(AnimalArray);
17、 Sort()的用法:如果需要将AnimalArray数组中元素的顺序按照字母顺序重新排列,就可以使用Array.Sort(AnimalArray);
18、 数组列表代码示例:见Chap11/rm366_sorted_array.aspx
19、 在这段代码中应注意:
(1) 元素在下拉列表当中显示的位置与其在数组中存储的位置一致
(2) 所有的集合都能够成为数据源!
(3) Myddl.DataSource=AnimalArray;表示下拉列表服务器控件可以到数组中获取它的数据
(4) Myddl.DataBind();表示将下拉列表控件绑定到(即配置为使用)指定的数据源
20、 使用数组的优缺点
(1) 易于使用:可用于执行简单的线性列表
(2) 元素修改速度快:因为很容易定位一个元素
(3) 元素移动速度快:容易从头到尾迭代每个元素
(4) 可以指定元素的类型:可以创建一个数组,存储任何类型的对象,.NET可以确保只把这中类型的对象添加到数组中
(5) 长度固定:数组不能自动改变其长度
(6) 很难插入元素:插入元素过程复杂
21、 集合相对于数组的优势:
(1) 集合中的项可以不指定数量
(2) 任何对象在集合中的位置都是可以变化的
22、 集合与数组的区别:
(1) 集合在System.Collections名称空间中定义
(2) 数组在System.Array名称空间中定义
(3) 集合和数组都继承自ICollection接口
23、 几个最常用的集合类:ArrayList、Hashtable和SortedList
24、 System.Collections.ArrayList类是一个特殊的数组,提供了标准数组的System.Array类中没有的功能,如可以根据增加或删除元素,动态改变数组的长度等
25、 ArrayList的优缺点:
(1) 支持自动改变长度:创建ArrayList实例的时候,不需要指定数组的范围,增加元素的时候,数组会自动确保有足够的空间
(2) 插入和删除元素时很灵活:仅需指定插入位置和待删除元素的位置即可
(3) 性能和速度较差:ArrayList的灵活性是以牺牲性能为代价的
26、 使用ArrayList的代码示例:Chap11/rm370_arraylist.aspx
27、 在这段代码中应注意:
(1) 在初始化ArrayList实例的时候,没有指定新ArrayList实例的长度,也没有指定ArrayList实例的数据类型
(2) 可以使用Insert()方法在ArrayList指定位置插入元素
(3) 可以使用Remove()或RemoveAt()方法在ArrayList中删除指定的元素
28、 System.Collections.Hashtable类提供了把对象绑定为“键/值对”来执行操作的功能。Hashtable不必使用数字索引,键可以使用各种对象类型,值可以是任何类型的对象
29、 Hashtable的优缺点:
(1) 自由添加和删除元素,不必受长度限制
(2) 提供快速查找功能
(3) 性能和速度较差:比ArrayList更慢
(4) 键必须是惟一的
(5) 没有有效的排序:Hashtable中元素的排序是由.NET内部机制确定的,但使用键或值是不能排序的
30、 使用Hashtable的代码示例:Chap11/rm375_hashtable.aspx
31、 在这段代码中应注意:
(1) 键是区分大小写的
(2) 注意在foreach迭代过程中使用的临时对象是DicrionaryEntry对象
(3) 在新的Hashtable实例初始化完成后,键和值就都已经确定了
(4) ListItem的对象完成了“将键/值对绑定在一起”的操作
(5) ListItem的对象将此绑定后的元素赋予每一个dropdownlist的Item,而dropdownlist可以使用dropdownlist.SelectedItem.Value访问此元素的键(Key值)或使用dropdownlist.SelectedItem.Text访问此元素的值(Value值)
32、 SortedList也是一个存储键/值对的集合,在该集合中也可以插入或删除项,也可以对项进行有效的排序
33、 SortedList中的项按照“键”来排序,而不是“值”
34、 使用SortedList的代码示例:Chap11/rm379_sortedlist.aspx
35、 在这段代码中应注意:
(1) 在Item.Key.ToString()和Item.Value.ToString()赋值的问题上,依然是可以交换的,不会产生错误,但可能会是不符合实际需要的结果
(2) 只要SortedList确定了,那么其Key的顺序就确定了,就等于在dropdownlist实例中的排列顺序确定了