集合
集合类都定义在 **System.Collections **
类名 | 特点 |
---|---|
ArrayList | 与数组相似,能保存不同类型数据,能动态改变集合元素的数量 |
Stack | 后进先出(LIFO) |
Queue | 先进先出(FIFO) |
HashTable | 键(key)/值(Value) ,根据哈希代码1组织键/值对0 |
SortedList | 按照键值对进行排序的键/值对的集合,元素可按键值或索引访问 |
- 集合类实现了“ICollection”接口,在ICollection接口中有3个属性和一个方法
-
count
-
IsSynchronized 能够根据|访问集合的线程是否安全|返回布尔值
-
SyncRoot 同步访问集合的对象
-
CopyTo(Array array ,int index ) 将集合中特定索引的元素复制到指定数组
- 集合类实现了“IEnumerable”接口,可以使用foreach循环对集合元素遍历
ArrayList集合保存不同类型数据
ArrayList list = new ArrayList(otherCollection);
/*
定义ArrayList,将其他集合的元素通过参数传入集合
object,添加任何类型的元素
*/
/*
* 调用arraylist类的方法 add 添加数据
* 使用foreach遍历并输出list对象中的数据
* 使用[]操作符输出list对象中的数据
*/
//声明使用的命名空间
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace collection
{//定义program类
class program
{
static void Main()
{ //创建 arraylist 类的对象
ArrayList list = new ArrayList();
//调用arraylist类的方法 Add 添加数据
list.Add(13);
list.Add(12);
list.Add(432);
list.Add(899);
list.Add(8900);
list.Add(13);
//使用Capacity获取或者设置List的容量,list.Capacity=10
list.Capacity=10;
Console.WriteLine("list.Capacity=" + list.Capacity);
//使用foreach遍历并输出list对象中的数据 输出:[13][12][432][899][8900][13]
foreach (int num in list)
Console.WriteLine("["+num+"]");
Console.WriteLine("\n");
//使用list.Remove(object)集合移除元素object,使用list.Remove(int)移除int位置上的元素
list.Remove(8900);
list.RemoveAt(1);
//使用list.Insert(int,object)向集合int位置上添加元素object
list.Insert(1, 31);
//使用count属性获取元素个数,使用[]操作符输出list对象中的数据,输出[13][31][432][899][13]
for (int i = 0; i < list.Count; i++) Console.WriteLine("["+list[i]+"]");
Console.WriteLine("\n");
//使用List.TrimToSize时集合大小与集合元素个数一致,list.Capacity=5
list.TrimToSize();
Console.WriteLine("list.Capacity=" + list.Capacity);
//使用list.Contains(object)查询是否包含int,输出:bool list.Contains(31)=True
Console.WriteLine("bool list.Contains(31)=" + list.Contains(31));
//使用IndexOf(object)索引object位置,输出list.IndexOf(13)=0 list.IndexOf(1300)=-1 list.LastIndexOf(13)=4
Console.WriteLine("list.IndexOf(13)=" + list.IndexOf(13));
Console.WriteLine("list.IndexOf(1300)=" + list.IndexOf(1300));
Console.WriteLine("list.LastIndexOf(13)=" + list.LastIndexOf(13));
//clear清除集合元素 list.Count=0
list.Clear();
Console.WriteLine("list.Count=" + list.Count);
Console.ReadLine();
}
}
}
属性 | 特点 |
---|---|
Capacity | 获取或者设置ArrayList集合大小 |
Count | 获取ArrayList元素数量 |
Add\Remove() | 在集合末尾添加/移除集合|元素 |
ToArray | 返回一个Object的数组,包含ArrayList的所有元素 |
Stack集合处理栈&Queue集合处理队列
Stack | Queue |
---|---|
Push:进栈操作 | Enqueue:进队 |
Pop:出栈操作 | Dequeue:出队 |
Peek:获取最早出栈的变量(最后一个入队),但该元素依然在栈中 | Peek:获取最早出队的变量(最早一个进队),但该元素依然在队中 |
//声明使用的命名空间
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace collection
{//定义program类
class program
{
static void Main()
{//创建 stack 类的对象
Stack stack = new Stack();
//调用stack类的方法 push 添加数据
stack.Push(100);
stack.Push(123);
stack.Push(213);
//创建queue 类的对象,stack传入queue 也是LIFO顺序
Queue queue = new Queue(stack);
//使用queue类的方法 enqueue 添加数据 queueLength:6 213、123、100、123、4342、3432
queue.Enqueue(123);
queue.Enqueue(4342);
queue.Enqueue(3432);
Console.WriteLine("queueLength:" + queue.Count);
//使用queue类的方法 dequeue取出数据,取完后queue.Count=0
while (queue.Count != 0)
{
Console.WriteLine("queue.data:" + queue.Dequeue());
}
Console.WriteLine("queueLength:" + queue.Count);
Console.WriteLine("stackLength:" + stack.Count);
Console.WriteLine(stack.Peek());
//使用stack类的方法 pop 取出数据,取完后Stack.Count=0
while (stack.Count != 0)
{
Console.WriteLine(stack.Pop());
}
Console.WriteLine("stackLength:" + stack.Count);
Console.ReadLine();
}
}
}
键-值 字典类型的集合
Hashtable
key-value类型
获取Hashtable元素不会改变Hash table的大小
可分别检索Key 和Value的值
//声明使用的命名空间
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace collection
{//定义program类
class program
{
static void Main()
{//创建 Hashtable 类的对象
Hashtable ht = new Hashtable();
ht.Add(1, "a");
ht.Add(2, "b");
ht.Add(3,"c");
//LIFO顺序遍历
foreach (int key in ht.Keys) { Console.WriteLine("[" + key + ":" + ht[key] + "]");}
foreach(string v in ht.Values)
{Console.WriteLine("[" + v);}
ht.Remove(1);
Console.WriteLine("ht.Count=" + ht.Count);
Console.WriteLine("ht.Contains(1)=" + ht.ContainsKey(1));
Console.ReadLine();
}
}
}
sortedList
与HashList的区别
-
对元素使用整型数值索引,且SortedList对集合元素自动排序并储存,因此输出也是有序的。
-
可以使用自定义的类作为键值,需要实现Hashtable集合所具备的一些条件2外,还需这些类实现了Icompareable接口(存在CompareTo)[String类和其他一些简单的数据类型都能提供Icompareable接口的实现]
方法 特点 SL.GetKey(i) 指定索引的键值 SL.GetByIndex(i) 指定索引的元素值 Count Keys Values Add(object key, object value) IndexOfKey() IndexOfValue() Remove() RemoveAt() Clear() ContainsKey() ContainsValue()