1.Array数组
一维数组
如:声明一个数组 int[] array = new int[5];
访问数组中的元素数据, 通过下标来获取。
int[ ] array = new int [5] {1,2,3,4,5};
array[2] = 4;
规则二维数组(类似于矩阵),每行长度都相等。
int[,] s = new int[3,3] {
{2,3,4},
{5,5,6},
{2,1,4}
};
s[2,2] = 20;
不规则二维数组(一个数组里放了其他很多数组),每行长度可以不相等。
int[ ] [ ] m = new int[3] [ ]{
new int[] {1,2,3},
new int[] {4},
new int[] {6,7}
};
这种数组索引速度非常快,访问一个元素的时间是恒定的O(1)。
但是由于连续存储,插入新的元素不方便;
2.ArrayList数组
System.Collections 下;
- 不必声明ArrayList的时候指定长度。 ArrayList对象的长度按照存储数据来动态增长与缩减。
- 可以存不同类型的元素。ArrayList把元素都当Object来处理
正是这种可以存不同类型的功能,会使程序不安全,造成频繁的装箱拆箱,性能下降;
3.List<> 泛型集合
List<> 是ArrayList类的泛型等效类,但不同在于 声明时,需要声明数据的对象类型,不需要指定长度。
优点:
- 确保了类型安全;
- 取消了拆箱和装箱的操作,由于是泛型而无需运行时检查类型;提高了性能
- 融合了Array可以快速访问的优点,ArrayList长度灵活的优点。
4.链表 LinkedList
(1)单链表
坏:链表查找麻烦,需要从头节点开始,直到找到所需结点;
好:插入或删除节点时,不需要考虑容量问题;在有顺序的链表中,插入时间为O(1),反之为O(n),需要从开始遍历;
——Insert:
要插入的元素先发起Link,再接受链表的Link;
——Remove:
link直接变化即可;
(2)双向链表
——Insert
——Remove