C#集合(泛型集合与非泛型)

每日一句:自律+努力+方法+坚持+时间=优秀

集合特点:

一种数据容器,一种数据结构

容纳多个数据;大小可变;空间不一定连续

命名空间:

非泛型集合: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() 读队首

猜你喜欢

转载自blog.csdn.net/m0_63330263/article/details/126301080
今日推荐