使用集合组织相关数据

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倍

问题一:什么是集合?
  将一对数据类型相同的数据放入一个容器内,该容器就是一个集合。
问题二:什么是数组?
  内存中开辟的一连串空间

原文地址:https://www.cnblogs.com/GIRLANDBOYS/p/7002010.html