C#使用集合组织数据(HashTable、ArrayList、List,Dictionary

时间:2022-09-03 17:56:23

为什么会有集合?

为了弥补数组动态添加元素和删除元素不足,集合优点:长度可变、动态维护。




1.ArrayList:类似于数组,可以直观地动态维护,它的容量可以根据需要自动扩充,它的索引会根据程序的扩展而重新进行分配和调整.


下面是代码的操作实现:

 	     //创建两个用户对象
User jack = new User("Jack","18");
User tom = new User("Tom","20");
//创建ArrayList集合
ArrayList userList = new ArrayList();


//将对象添加到ArrayList
userList.Add(jack);
userList.Add(tom);


//取出单个元素
//需要转换类型
User user = (User)userList[0];
Console.WriteLine(user.Username);

//遍历ArrayList中的元素
//和java不同之处,获取长度java用Size(),c#用Count
for(int i=0;i<userList.Count;i++){
//需要转换类型才能取出值
user = (User)userList[i];
Console.WriteLine(user.Username);
}

//删除ArrayList中的元素
userList.Remove(jack); //通过对象名删除
userList.RemoveAt(0); //通过索引删除
userList.Clear(); //全部清空

Console.ReadLine();


ArrayList删除细节:ArrayList的索引会自动分配和调整,假设集合有三个元素,删掉第1个元素后第2个元素的索引就变成0.




2.Hashtable(哈希表):通常称为哈希表,也有人称它为“字典”。哈希表的数据是通过键(key)和值(value)来组织的。

哈希表也属于System.Cpllections命名空间,它的每一个元素都是一个键值对。


接下来是代码实现:


            //建立用户集合
Hashtable users = new Hashtable();

//初始化两个用户对象
User jack = new User("Jack", "18");
User tom = new User("Tom", "20");

//HashTable添加元素
users.Add(jack.Username,jack);
users.Add(tom.Username, tom);

//HashTable获取单个元素(通过键获取值)
User user = (User)users["Jack"];
Console.WriteLine(user.Username);

//HashTable删除元素
users.Remove("Jack");

//遍历HashTable的key
foreach(Object obj in users.Keys){
user=(User)users[obj];
Console.WriteLine(user.Username);
}

//遍历HashTable的value
foreach (Object obj in users.Values)
{
user = (User)obj;
Console.WriteLine(user.Username);
}

   	    //使用对象遍历
foreach(DictionaryEntry en in users){
Console.WriteLine(en.Key);
Console.WriteLine(en.Value);
}


总结:ArrayList和HashTable存储的数据类型都会被转换为Object类型,可以放入任何类型数据,类型安全性弱,而且要频繁地转换类型,使用泛型集合能很好地解决这两个问题。


泛型:C#2.0中的新特性,通过泛型可以定义类型安全的数据类型,最常见的应用就是创建集合类,可以约束集合类中的元素类型。比较典型的集合是List<T>和Dictionary<K,V>。


泛型集合List<T>和ArrayList的用法基本一样,不同点如下:

1.泛型集合对保存元素做类型约束,而ArrayList可以添加任何类型

2.泛型集合添加和读取值无需装箱拆箱,ArrayList添加和读取值类型元素需要拆箱、装箱。


相同点如下:

1.通过索引访问集合中的元素

2.添加元素方法相同

3.删除元素方法相同