Array:
- 内存中连续存储,查找速度快,赋值与修改元素简单。
int[] array = new int[5];//如果数组元素类型为基本数据类型,在完成new 操作之后,数组中的元素会自动初始化为空值,可以直接使用,但是数组元素为引用类型,在完成new操作之后,没有给引用类型赋值,就直接使用数组中的元素,会产生运行时异常
int[] array1 = new int[5] { 1, 3, 5, 7, 9 }; //定长,
int[] array11 = new int[] { 1, 3, 5, 7, 9 };
int[] array2 = { 1, 3, 5, 7, 9 }; //静态初始化,数组的存储空间的分配是由编译器完成
ArrayList:
- ArrayList把所有插入其中的所有数据当做object,故添加不同类型的数据是允许的,这也导致了ArrayList不是类型安全的,处理数据时很可能报类型不匹配的错误,并且在存储或检索值类型是通常发生装箱拆箱操作,带来很大的新能损耗。
- ArrayList可以根据存储的数据来动态扩容,所以,在声明ArrayList对象时并不需要指定它的长度。
- ArrayList底层是封装了数组,默认初始容量为10,超过后自动扩容为原来长度的1.5倍,仍然超过则设置为最大值0x7fffffff-8,再超过则设置为0x7fffffff
- 正确预估可能的元素,并在适当的时候调用trimToSize()方法是提高ArrayList使用的重要途径。trimToSize将ArrayList实例的容量缩减为列表的当前大小。应用程序可以使用这个操作来最小化ArrayList实例的存储。
-
ArrayList list1 = new ArrayList(); ArrayList list1 = new ArrayList(40);
List:
- List是ArrayList的泛型等效类,大部分用法与ArrayList相似,但在声明List集合时必须声明内部数据的对象类型。
-
List<string> list = new List<string>(); //新增数据 list.Add(“abc”); //修改数据 list[0] = “def”; //移除数据 list.RemoveAt(0);
LinkedList:
- 链在内存中不连续,插入删除速度快,查找速度慢。
- 数组和数组列表在内存中连续,从中间位置插入删除一个元素需要付出很大的代价。