深入.NET平台和C#编程 第三章

深入.NET平台和C#编程 第三章
使用集合组织相关数据
1.集合的概念:
集合:某些指定的对象集在一起就是集合。
比如:一个容器内有机器猫,樱桃小丸子,奥特曼,这个包括他们的容器就叫做集.合
数组:可以存储相同数据类型的一堆数据的容器
自动扩容:Capcity和Count区别?
Capacity:集合占用空间
Count:集合存储元素个数

2.ArrayList:
ArrayList:
在这里插入图片描述

属性名称 说明
Count 获取ArrayList中实际包含的元素数
返回值 方法名称 说明
int Add(Object value) 将对象添加到ArrayList的结尾处
void RemoveAt(int index) 移除ArrayList指定索引处的元素
void Remove(Object value) 从ArrayList中移除特定对象
void Clear() 从ArrayList中移除所有对象
集合的优点:{1.自动扩容
{2.集合中很多方法能让我们更加快捷的操作集合中的数据
集合的本质:{1.使用ArrayList首先需要引入命名空间
{2.集合动态扩容原理:如果集合中元素个数为0,并没有开辟空间
{3.默认如果集合中出现第一个元素,那么集合的大小为4,如果放入第5个元素那么扩容为8
(即:初始4,出现5的时候42,此时初始为8,出现9即82,依次循环。。。)
int num=(this.item.Length==0)?4:(this.Length*2);

   函数:给类定义一个方法,方法名和类名相同没有返回值,没有void
          public class Student
          {  
                 public Student()
                 {
                       
                 }
          }

命名空间:
同名类便于区分,加快检索硬盘上某个类的速度
Using System.Collections
Using System.Collections.Generic; 泛型命名,默认导入

   删除:
   {1.Remove
   {2.RemoveAt
   {3.Clear

3.HashTable(哈希表)
在这里插入图片描述

属性名称 说明
Count 获取包含在Hashtable中键/值对的数目
Keys 获取包含在Hashtable中键的集合
Values 获取包含在Hashtable中值得集合
返回值类型 方法名称 说明
void Add(object Key,Object value) 将带有指定键和值得元素添加到Hashtable中
void Remove(Object key) 从Hashtable 中移除带有特定键的元素
void Clear() 从Hashtable中移除所有元素
根据键(Key)可以查找到相应的值 (Value)
三种方法:{1.通过key找value key和value都显示
foreach (var item in table.Keys)
{2.只要获取value
foreach (var item in table.Values)
{3.同时遍历key和value
foreach (DictionaryEntry item in table)
DictionayEntry是一个结构,定义可设置或者检索Hashtable的键/值
删除的两种方法:
Remove()
HashTable没有RemoveAt()方法,因为根本没有索引
table.Remove(“001”);
table.Clear();

var :隐式类型推断
比如:var num=5; 那么var=int 即: var name=“小明”; 那么var=string

4.泛型
泛型:
就是为了约束ArrayList中元素类型,而制定的一个新的集合类型,该类型只能加入同一类型的多个元素,标识符,可以看成是一个占位符,泛型是将运行时错误提前到了编译时
List无需类型转换

Dictionary<K,V>:具有泛型的全部特性
Dictionary<string,person> dic=new Dictionary<string,person>
1.非泛型集合:
主要位于System.Collections命名空间,包括ArraryList,BitArray,Stack,Queue等类,同时System.Collections.Specialized下的ListDictionary等类以及一些接口。
非泛型集合存在的问题:
1)性能问题:.Net支持两大数据类型:值类型和引用类型,有时候需要用某个类别的变量表示另外一个类别的变量,c#提供了装箱的机制将值类型的数据保存在引用类型中,装箱的实际定义为CLR会在堆上分配新的对象,将值类型的值赋予新的实例,并返回新的对象的引用。相反的操作为拆箱,拆箱是将保存在对象引用上的值转换回栈上相应的值类型,CLR会验证收到的值类型是否是装箱的值类型,如果是就将值赋值回本地值类型,如果不是则抛出异常。尽管装箱和拆箱都很方便,但带来的栈/堆内存的转移会导致性能问题。
2)类型安全问题
除了拆箱的时候我们需要记住装箱的值类型,还需要类型安全的容器来操作某些特定的数据类型,在引入泛型之前,需要通过手工创建强类型的集合类。
2.泛型集合
使用泛型集合可以解决上面的问题,包括性能的损失,泛型更类型安全,以及无需手工创建强类型的集合类,只需使用泛型集合并制定类型。
1)在创建泛型结构的时候需要在声明变量或者调用构造函数的时候指定类型参数,此时所有的占位符都将替换为类型参数。
2)非泛型类或者结构都支持泛型成员,在调用这种方法时需要指定类型参数,例如System.Array的sort静态方法包含一个相应的泛型方法sort().
List与ArrayList的区别
在这里插入图片描述

异同点 List ArrayList
不同点 对所保存元素进行类型约束 可以增加任何类型
添加/读取值类型元素无须拆箱、装箱 添加/读取值类型元素需要拆箱
相同点 通过索引访问集合中的元素
添加元素方法相同
删除元素方法相同
泛型的集合Dictionary<K,V>
语法:
Dictionary<K,V> 对象名=new Dictionary<K,V>();
Dictionary<K,V>和Hashtable的对比
在这里插入图片描述

异同点 Dictionary Hashtable
不同点 对所保存元素进行类型约束 可以增加任何类型
添加/读取值类型元素无须拆箱、装箱 添加/读取值类型元素需要拆箱
相同点 通过Key获取Value
添加元素方法相同
删除元素方法相同
遍历方法相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值