- 集合
- 集合的命名空间:using System.Collections;
- 泛型的命名空间:using System.Collections.Generic; 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比泛型集合更好的类型安全性和性能。
- 集合的事例代码:
ArrayList list = new ArrayList();
List<string> arr = new List<string>();
//添加:
Console.WriteLine("修改之前");
//1.添加单个数据
list.Add("张三");
//2.批量添加数据
list.AddRange(new string[] {"李四","王五","1","2","2","9" });
//3.指定下标添加数据
list.Insert(1,"嘴三半");
//在指定位置批量添加多个数据
list.InsertRange(2,new string[] {"王三半1","宫向南"});
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine("--------------------------------");
删除:
// //1.删除单条数据
// list.Remove("张三");
// //2.批量删除多条数据
// list.RemoveRange(2 ,3);
// //3.指定删除下标元素
// //list.RemoveAt(1);
// for (int i = 0; i < list.Count; i++)
// {
// Console.WriteLine(list[i]);
// }
// //4.删除全部元素
// list.Clear();
Console.WriteLine("修改之后");
//修改数据:
//1.通过下标来修改一个元素
list[0] = "张四";
//2.批量修改数据
list.SetRange(2,new string[] {"1" ,"2"});
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine("--------------------------------");
//查询数据:
//1.用foreach循环查询数据
//foreach (var item in list)
//{
// Console.WriteLine(item);
//}
//2.用for循环查询数据
栈 stack 先进后出
队列 queue 先进先出
static void Main(string[] args)
{
Console.WriteLine("---------栈--------");
Stack s = new Stack();
Console.WriteLine();
//向栈存储一些元素 压栈
s.Push("a");
s.Push("b");
s.Push("c");
//要取栈里面的元素 获取栈顶的元素
Console.WriteLine("获取栈顶的元素:");
object obj = s.Peek();
Console.WriteLine(obj);
//将栈顶的元素出栈,返回刚刚出栈的元素
Console.WriteLine("返回出栈的元素:");
object p = s.Pop();
Console.WriteLine(p);
//输出栈里面的全部元素
Console.WriteLine("循环输出全部的元素:");
foreach (object obj1 in s) {
Console.WriteLine(obj1);
}
Console.WriteLine("--------队列-------");
Queue q = new Queue();
Console.WriteLine();
//将元素依次添加到队列中:
q.Enqueue("a");
q.Enqueue("b");
q.Enqueue("c");
//获取栈顶的元素:
Console.WriteLine("获取栈顶的元素");
object equ = q.Peek();
Console.WriteLine(equ);
//将首位元素 移除队列 删除这个元素
Console.WriteLine("将首位元素 移除队列 删除这个元素");
object dqu = q.Dequeue();
Console.WriteLine(dqu);
//循环输出队列里的全部元素:
Console.WriteLine("循环输出队列里的全部元素");
foreach (object obj2 in q)
{
Console.WriteLine(obj2);
}
Hashtable类:
在c#中,hashtable(哈希表)是system.collection命名空间提供的一个集合,可以将数组作为一组键(key)值(value)来存储,其中key通常可以用来快速查找,同时key是区别大小写,value用于存储对应的key的值。
Hashtable中 key/value键值对均为object类型,所以hashtable可以支持任意类型的key/value键值对,但是key必须唯一的,可以向hashtable中自由添加和删除元素。
/*
* 键值对 (key,value)
* key不能重复 value可以重复
* 可以自动排序
*/
//声明一个hashtable
Console.WriteLine("------------hashtable------------");
Hashtable h = new Hashtable();
//添加一对键值对
h.Add("name","李XX");
h.Add("age",12);
h.Add("sex", "男");
h.Add("address", "阳泉市");
//根据 key 修改
h["name"] = "臭弟弟"; //键如果存在 正常修改
h["job"] = "学生"; //键不存在,相当于添加一对 键值对
//删除 根据key 直接删除一对 键值对
h.Remove("sex");
//hashtable里面存在了 返回true 如果不存在了 返回false
Console.WriteLine("hashtable里面存在了 返回true 如果不存在了 返回false");
Boolean b = h.Contains("age");
Console.WriteLine(b);
Boolean b1 = h.Contains("sex");
Console.WriteLine(b1);
Console.WriteLine();
//查询 hashtable 里的的所有东西
Console.WriteLine("查询 hashtable 里的的所有东西");
foreach (DictionaryEntry dae in h)
{
object obj1 = dae.Key;
object obj2 = dae.Value;
Console.WriteLine("{0}----{1}",obj1,obj2);
}
Console.WriteLine();
//遍历 所有的 键(kye)
Console.WriteLine("遍历 所有的键(kye)");
foreach (object ob in h.Keys) {
Console.WriteLine(ob);
}
Console.WriteLine();
//遍历所有的值(value)
Console.WriteLine("遍历所有的值(value)");
foreach (object ob1 in h.Values) {
Console.WriteLine(ob1);
}
-
Arraylist和Hashtable的比较:
-
泛型
List类:
与arraylist相比,使用list时添加的唯一语法是声明和实例化中的类型参数,虽热稍微增加了一些编码的复杂性,但好处是可以创建一个比arraylist更安全并且速度更快的列表,特别适用于列表项是值类型的情况。List类的这里的参数T就是指传入参数的类型,在创建集合对象时,就制定了元素的类型,所以在向集合添加元素时,如果类型不匹配就会出现语法错误。
如果声明int类型了,在添加元素时,就只能添加指定类型的元素。 -
Dictionary<Tkey,TValue>
在system.collections.generic中也有一个键值对的泛型集合dictionary<Tkey,Tvalues>称为字典。声明一个键为int型,值为object型的字典代码如下:
Dictionary<int,object> dic =new dictionary<int,object>(); -
对比泛型集合与普通集合