每日一句:自律+努力+方法+坚持+时间=优秀
集合特点:
一种数据容器,一种数据结构
容纳多个数据;大小可变;空间不一定连续
命名空间:
非泛型集合:System.Collections;
非泛型集合:System.Collections.Generic;
集合两大体系:非泛型集合、泛型集合
非泛型集合 | 泛型集合 | |
列表 | ArrayList | List<T> |
字典 | HashTable | Dictionary<TKey,TValue> |
堆栈 | Stack | Stack<T> |
队列 | Queue | Queue<T> |
区别:
非泛型集合 | 泛型集合 |
可以增加任何类型 | 对所有保存的元素进行类型约束 |
(泛型集合将所有元素都看成Object类型,是引用类型,如果),添加/读取值类型需要装箱,拆箱(,会带来性能额外的开销) | 添加/读取值类型无需装箱,拆箱 |
非泛型集合缺点:
1.性能不好,可能发生装箱(将值类型强制转换成引用类型) |
2.类型不安全,可能会发生类型转换的异常 |
泛型集合优点与特性:
性能高、类型安全、二进制代码重要,代码的扩展
详情——>
目录
字典Hashtable Dictionary,tvalue>
列表 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() | 读队首 |