C# 集合和数组Word下载.docx
- 文档编号:21809439
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:27.71KB
C# 集合和数组Word下载.docx
《C# 集合和数组Word下载.docx》由会员分享,可在线阅读,更多相关《C# 集合和数组Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
以及查询秩、边界和数组中存储的值的总数。
1)数组是固定大小的,不能伸缩。
虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。
随后以前的数组就废弃!
而集合却是可变长的。
2)数组要声明元素的类型,集合类的元素类型却是object.
3)数组可读可写,不能声明只读数组。
集合类可以提供ReadOnly方法以只读方式使用集合。
4)数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。
集合也是数据列表却不使用下标访问。
很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!
1.定义
一个数组的定义中包含以下几个要素:
Ø
元素类型(相同)
数组的维数(初始化时必须给定)
每个维数的上下限
首先,给定类型的数组只能保存该类型的元素。
其次要规定数组的维数,可以用几何的知识理解数组的维数,可以用一维坐标轴来理解一维数组;
用平面直角坐标系来理解二维数组;
用三维立体坐标系来理解三维数组等。
再次,数组必须规定每个维数的大小。
如:
int[]anIntArray;
//定义数组
anIntArray={1,2,3};
//上述代码定义了一个数组并对其进行了初始化。
可以一次完成
int[]sz=newint[];
//初始化数组,如果不指定大小,报语法错误。
anIntArray=newint[]{1,2,3};
//用new关键字初始化数组的元素
anIntArray=newint[3]{1,2,3};
//指定数组大小用new关键字初始化数组元素
数组还有另外一种初始化方式,即指定数组大小并用new关键字初始化数组的元素:
int[]anIntArray=newint[3];
执行时.NET将会为数组中的每一个元素赋予同一个(定义类型的)默认值。
对于Int型的变量来说这个默认值是0。
2.数组的索引
数组的索引也就是通常所说的数组下标,英文为Index。
数组的索引是从0开始的。
3.数组的遍历
C#提供了foreach语句以实现数组的遍历功能。
可以使用foreach语句访问数组中的每个元素而不需要确切地知道每个元素的索引。
int[]myArray=newint[5]{14,25,7,36,53};
//采用foreach语句对myArray进行遍历
foreach(intnumberinmyArray)
{
Console.Write(number);
}
//
for(inti=0;
i<
5;
i++)
Console.Write(myArray[i]);
}
二.ArrayList
动态数组ArrayList.ArrayList类提供了继承了IList接口。
ILsit接口成员:
add、insert、RemoveAt、Remove、contains、Clear、indexof方法,它最大的特色在于提供类似数组索引的访问机制。
◆数组的容量是固定的,而ArrayList的容量可根据需要自动扩充,定义是如果未设置容量,向ArrayList添加结束后,容量为初始化的2倍,定义时设置容量,超出时,该容量自动翻倍。
如果更改了Capacity属性的值,则可以自动进行内存重新分配和元素复制。
◆ArralyList提供添加、插入或移除某一范围元素的方法。
在数组中,只能一次获取或设置一个元素的值。
◆使用Synchronized方法很容易创建ArrayList的同步版本。
数组将实现同步的任务留给了用户。
◆ArrayList提供将只读和固定大小包装返回到集合的方法;
而数组则不提供该方法。
◆ArrayList只提供一维的形式,而数组可以是多维的。
1.ArrayLlst的常用属性:
属性说明
Capacity获取或设置ArrayList可包含的元素数
Count获取ArrayList中实际包含的元素数
IsFixedSize获取一个值,该值指示ArrayList是否具有固定大小
IsReadOnly获取一个值,该值指示ArrayList是否为只读
IsS_ynchrOnlzed获取一个值,该值指示是否同步对ArrayList的访问
Item获取或设置指定索引处的元素
SyncRoot获取可用于同步ArrayList访问的对象
2.ArrayList元素的添加
C#中为ArrayList提供了两个添加元素的方法,分别为ArrayList.Add();
和ArrayList.Insert();
1)ArrayList.Add():
该方法将给定的Value对象插入到ArrayList的现有数据的末尾处。
例:
ArrayListarrayList=newArrayList(3);
arrayList.Add("
WWW"
);
002"
Response.Write(arrayList.Capacity.ToString());
//输出arrayList的容量
//输出arrayList中元素的个数
Response.Write(arrayList.Count.ToString());
//输出arrayList索引为0的值:
"
Response.Write(arrayList[0].ToString());
//输出arrayList索引为1的值:
Response.Write(arrayList[1].ToString());
当ArrayList为固定大小或只读时,如果对其进行元素的插入操作或超出固定大小时,则将会引发NotSupportExCeption异常。
解决办法是先检测ArrayList是否为只读或固定大小,之后再进行插入,可以使用ArrayList.IsFixedSize和ArrayList.IsReadOnly进行判断。
2)ArrayList.Insert():
该方法向指定的索引位置插入value,如果其后有元素将自动向后错开。
由于index参数的存在,因此,Insert方法比Add多了一个可能产生的异常。
该异常为ArgumentoutofRangeExceptlon,当index小于零或大于ArrayList中的元素个数时引发。
ArrayListarrayList=newArrayList(3);
//初始添加插入到ArrayList的现有数据的末尾处:
索引为0
arrayList.Add("
索引为1
arrayList.Insert(1,"
Wu"
//添加位置为索引为1
arrayList.Insert(2,"
zy"
//添加位置为索引为2
//输出arrayList的容量:
6
Response.Write(arrayList.Capacity.ToString());
//输出arrayList中元素的个数:
4
Response.Write(arrayList.Count.ToString());
//输出arrayList索引为0的值:
Response.Write(arrayList[0].ToString());
//输出arrayList索引为1的值:
Response.Write(arrayList[1].ToString());
//输出arrayList索引为2的值:
Response.Write(arrayList[2].ToString());
//输出arrayList索引为3的值:
Response.Write(arrayList[3].ToString());
在指定的位置成功地插入了指定的字符串。
同时,由于ArrayList的初始容量为3,而所有插入的元素个数为4,当插入第4个元素的时候ArrayList的容量翻倍,因此,运行结果中显示容量大小为6。
3)集体添加
//集体添加方法一
foreach(intnumberinnewint[6]{9,3,7,2,4,8})
arrayList.Add(number);
//集体添加方法二
int[]number2=newint[2]{11,12};
arrayList.AddRange(number2);
//新ArrayList只取旧ArrayList一部份
ArrayListal2=newArrayList(arrayList.GetRange(0,2));
3.ArrayList元素的删除
C#中为删除ArrayList元素提供了以下几种方法
◆ArrayList.Clear():
为一个不带参数的方法,功能为从ArrayList中移除所有元素
//输出arrayList的容量:
3
//输出arrayList中元素的个数:
2
arrayList.Clear();
//清空arrayList
◆ArrayList.Remove():
从指定的ArrayList中移除obj对象,如obj不存在则不引发异常,ArrayList保持不变。
ArrayListarrayList=newArrayList(3);
//初始添加插入到ArrayList的现有数据的末尾处:
索引为0
索引为1
3
arrayList.Remove("
//移除object(WWW,有,移除该对象)
003"
//移除object(003,没有,不报异常,ArrayList保持不变)
1
◆ArrayList.RemoveAt():
提供了根据索引值移除ArrayList元素的方法。
arrayList.RemoveAt(0);
//根据索引移除(【0】,有,移除该对象,其后有数据往前补)
arrayList.RemoveAt
(1);
//根据索引移除(【1】,没有,报异常:
索引超出范围。
必须为非负值并小于集合大小)
4.ArrayList元素的获取
1)通过arrayList[index]取出,取出时为object类型。
ArrayListarrayList=newArrayList();
//输出arrayList索引的【0】的值(存在,输出)
Response.Write(arrayList[2].ToString());
//输出arrayList索引的【2】的值(不存在,报异常:
索引超出范围)
2)使用与数组相同的方法ArrayList进行遍历,即foreach语句
//遍历方法一:
遍历输出(不需要强转)
foreach(stringainarrayList)
{
Response.Write(a);
}
//遍历方法二
for(inti=0;
arrayList.Count;
//一定要强制转换(根据添加的类型)
intnumber=(int)arrayList[i];
Console.WriteLine(number);
5.常用方法
1)Reverse()反转数组的元素
2)Sort()以从小到大的顺序排列数组的元素
3)Clone()复制一个数组
三.HashTable
在.NETFramework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;
value用于存储对应于key的值。
它表示键(key)/值(value)对的集合,这些键/值对根据键的哈希代码进行组织。
它的每个元素都是一个存储在字典实体对象中的键/值对。
键不能为空引用,但值可以。
Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对。
也就是说HashTable像一个字典,根据键可以查找到相应的值。
HashTable中的key/value均为object类型,由包含集合元素的存储桶组成。
存储桶是HashTable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。
每一存储桶都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。
HashTable是C#中一个较为复杂的类型,其构造函数就有16种之多,只介绍两种简单、实用的供参考:
◆HashTable()
构造函数定义使用默认的初始容量等默认值初始化HashTable类的新的空实例。
同ArrayList一样,其容量可以根据实际的需要自动增加。
HashTablemyHashTablel=newHashTable();
◆HashTab]e(Int32)
构造函数使用指定的容量初始化HashTable类的新实例。
此处指定的容量是指对象最初可包含的元素的近似数目,其容量以后可以自动增加。
HashTablemyHashTable2=newHashTable(5);
1.HashTable元素的添加
C#为HashTable元素的添加提供了HashTable.Add(key,value);
方法。
该方法的定义如下其中,key为要添加的元素的键,value为要添加元素的值,可以为空。
HashTable对于插入的键/值对没有具体的要求,可以是任意对象。
HashtablehashTable=newHashtable();
hashTable.Add(1,"
//插入到Hashtable:
key为1,int型
hashTable.Add(5,"
PPP"
key为5,int型
hashTable.Add("
my"
"
key为“my”,string型
Response.Write(hashTable.Count.ToString());
//获取Hashtable的键值对个数
2.HashTable元素的获取
与数组和ArrayList不同,HashTable不可以通过HashTable[index]的方式获取元素。
HashTable是以一种键/值对的形式存在的,因此要通过键来访问HashTable中的值,即[key].
例:
strings=(string)hashTable["
];
[key]存在则输出值。
不存在,报异常:
未将对象引入实例
1)C#中为HashTable的查找判断提供了以下方法:
HashTable.Contains和HashTable.ContainsKey方法实现的功能相同,皆为判断HashTable中是否包含指定的键。
HashTable.ContainsValue为判断HashTable中是否包含指定的值。
◆HashTable.Contains
◆HashTable.ContainsKey
◆HashTable.ContalnsValue
HashtablehashTable=newHashtable();
hashTable.Add(1,"
hashTable.Add(5,"
hashTable.Add("
Response.Write(hashTable.Contains
(1));
//判断hashTable中是否存在key值为【1】
(存在,返回true)
Response.Write(hashTable.ContainsKey("
));
//判断hashTable中是否存在key值为【"
】(存在,返回true)
Response.Write(hashTable.ContainsValue("
ppp"
//判断hashTable中是否存在Value值为【"
】(不存在,返回false)
2)HashTable的遍历
C#中提供了foreach语句以对HashTable进行遍历。
由于HashTable的元素是一个键/值对,因此需要使用DictionaryEntry类型来进行遍历。
//插入到Hashtable:
key为1,int型
key为5,int型
//插入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 集合和数组 集合 数组