每日一句:自律+努力+方法+坚持+时间=优秀
集合特点:
一种数据容器,一种数据结构
容纳多个数据;大小可变;空间不一定连续
命名空间:
非泛型集合:System.Collections;
非泛型集合:System.Collections.Generic;
集合两大体系:非泛型集合、泛型集合
|
非泛型集合 |
泛型集合 |
列表 |
ArrayList |
List<T> |
字典 |
HashTable |
Dictionary<TKey,TValue> |
堆栈 |
Stack |
Stack<T> |
队列 |
Queue |
Queue<T> |
区别:
非泛型集合 |
泛型集合 |
可以增加任何类型 |
对所有保存的元素进行类型约束 |
(泛型集合将所有元素都看成Object类型,是引用类型,如果),添加/读取值类型需要装箱,拆箱(,会带来性能额外的开销) |
添加/读取值类型无需装箱,拆箱 |
非泛型集合缺点:
1.性能不好,可能发生装箱(将值类型强制转换成引用类型) |
2.类型不安全,可能会发生类型转换的异常 |
泛型集合优点与特性:
性能高、类型安全、二进制代码重要,代码的扩展
详情——>
目录
列表 ArrayList List
ArrayList
字典Hashtable Dictionary,tvalue>
Hashtable(哈希表)
字典嵌套字典
堆栈 Stack (后进先出) Stack
对列 Queue(先进先出) Queue
列表 ArrayList List<T>
ArrayList
初始化:
ArrayList List=new ArrayList(); |
|
ArrayList List=new ArrayList(arryName); |
arryName:要添加集合的数组名 |
ArrayList List=new ArrayList(n); |
n:ArrayList对象的空间大小 |
属性:
Count |
获取ArrayList中实际包含的元素数 |
Item |
获取或设置指定索引处的元素数 |
方法:
元素的添加 |
|
Add() |
将对象添加到集合结尾处 |
Insert() |
将元素插入集合的指定索引处List.Insert(3,"张三”); |
元素的删除 |
|
Clear() |
移除所有元素 |
Remove() |
移除某个元素 |
RemoveAt(int index) |
移除指定索引处的元素 |
RemoveRange (int index,int count) |
移除一定范围的元素,count:要移除的元素数 |
元素的查找 |
|
Contains() |
用来确定某元素是否在ArrayList集合中,返回值为bool |
Sort() |
对集合中的元素进行排序 |
ArrayList的遍历
foreach语句
foreach(元素类型 迭代变量名 in 要处理的集合/数组名){}
foreach(string str in list)
{Console.WriteLine(str);}
字典Hashtable Dictionary<TKey,Tvalue>
一键对应一值,无序输出,不能重复键
Hashtable(哈希表)
表示键/值对的集合
它的每个元素都是一个存储在DictoryEntry对象中的键/值对
键不能为空引用,但值可以
初始化:
Hashtable hashtable=new Hashtable();
方法:
元素的添加 |
|
Add(Object Key,Object value) |
Key:添加元素的键,value:添加元素的值 |
元素的删除 |
|
Clear() |
移除所有元素 |
Remove(Object Key) |
移除指定键的元素 |
元素的查找 |
|
Contains(Object Key) |
判断是否返回指定键,返回值bool型 |
ContainsValue(Object value) |
判断是否包含特定值,返回值bool型 |
Hashtable元素的遍历
//遍历Hashtable中的元素并输出其键值对
foreach(DictionaryEntry dicEntry in hashtable)
{ Console.WriteLine(dicEntry.key + dicEntry.Value);
//获取键的集合
ICollection key=ht.keys;
foreach(string K in key)
{ Console.WriteLine(K+":"+ht[k];}
字典嵌套字典
private Dictionary<string,Dictionary<string,string>> dic=
new Dictionary<string(主键),Dictionary<string(子键),string>>();
void Start()
{ dic.Add("张三”,new Dictionary<string,string>());
dic["张三"].Add("电话”,“12345”);
dic["张三"].Add("地址”,“长春”);
Console.WriteLine(dic["张三"]["电话"]+"\t"+["张三"]["电话"]);}
堆栈 Stack (后进先出) Stack<T>
浏览器 撤销
Push() |
压栈 |
Pop() |
弹栈 读取并移除顶部对象 |
Peek() |
读栈顶 读取但不移除顶部对象 |
练习:主菜单——选项——游戏选项——难度调节——一般
逐层压栈,逐层弹栈,最后一个只读不弹
private Stack stack = new Stack();
void Start()
{
stack.Push("主菜单");
stack.Push("选项");
stack.Push("游戏选项");
stack.Push("难度调节");
stack.Push("一般");
while (stack.Count>1)
{
Debug.Log("弹栈:" + stack.Pop());
}
Debug.Log("只读不弹:" + stack.Peek());
}
对列 Queue(先进先出) Queue<T>
银行拿号,买票
Queue queue=new Queue();
Euqueue() |
入队,在列表中添加一项 |
Dequeue() |
出队,读取并移除 |
Peek() |
读队首 |