1.在以后开发中都会使用集合作为数据容器。
2.非泛型集合
2.1 单列:ArrayList
2.1.1 Add(Object):可以添加任何数据类型
--引发问题:当我们遍历,除非将单个元素的类型写成Object
2.1.2 Remove(真事的元素本身,Object类型)
--根据索引删除 RemoveAt(int index)
--特性:集合中的元素被删除后,索引会自动维护
2.2 双列:HashTable
问题:单列集合已经可以存储元素,并且可以轻松的通过各种方法去维护集合中的内容。为什么需要双列集合?
解析:有特定的场景用途
2.2.1 方案一:
foreach(string key in table.keys){
Console.WriteLine(key);
Student stu=(Student).table[key];
Console.WriteLine(stu);
}
2.2.2 方案二:
foreach(Student stu in table.Values){
Console.WriteLine(stu.Name);
}
2.2.3 方案三: key和value看成是一个整体 面向的就是table
foreach(DictionaryEntry item in table){
Console.WriteLine("key是{0}\tvalue是{1}",item.Key,(Student)item.Value.name);
}
2.2.4 删除数据table.Remove();只能按Key去删除一项,而不能通过下标删除
3.泛型集合
3.1 单列:List<T>
list.Contains();判断列表中是否包含指定元素
3.2 双列:Dictionary<K,V>
3.3 泛型:就是为了约束ArrayList中元素类型,而制定的一个新的集合类型,该类型只能加入同一类型的多个元素,标识符<T>可以看成是一个占位符,泛型是将运行时错误提前到了编译时
4.关于for增强
4.1 C# //错误:item是个迭代变量 它不能被改变
4.2 Java //没有语法错误,但是改不了,因为改的是迭代变量item的值,而不是和数组相关的某个下标对应的值。
5.集合本质的讲解 (集合为什么可以扩容?)
5.1 在Add()调度的时候
5.2 使用ArrayList首先需要引入命名空间
5.3 集合动态扩容原理:如果集合中元素个数为0,,并没有开辟空间
5.4 默认如果集合中出现了第一个元素,那么集合的大小是4,如果放入第5个元素,那么会扩容成8
5.5 如果在小括号中首次定义的时候指定了集合的长度,那么以后扩容的方式变成初次指定数字大小的2倍,如果没有指定长度,那么遵循5.2规范
5.6 集合内部也是通过两个数组相互copy完成的,但是微软已经对其做了优化,我们不用关心效率问题
5.7 集合的容量list.Capacity
5.8 集合装了几个元素list.Count
6.集合初始化器 (两种)
6.1 ArrayList list=new ArrayList(){"001","002"};
6.2 ArrayList list=new ArrayList(){
new Student(){Name="阿苏",Age=18},
new Student(){Name="baby",Age=8}
};
7.自动扩容
如果集合中一个元素都没有,Capacity的值为0,如果集合中出现第一个元素,分配4个空间,加入第5个元素的时候,可以容纳8个元素,每次扩容会扩成上次的2倍
问题一:什么是集合?
将一对数据类型相同的数据放入一个容器内,该容器就是一个集合。
问题二:什么是数组?
内存中开辟的一连串空间