首先看这个框架图:
List集合代表一个元素有序,可重复的集合,集合中每个元素都有对应的顺序索引。List接口中增加了一些根据索引操作元素的方法:
void add(int index,E element ) 在列表的指定位置插入该元素。
boolean addAll(int index,Collection c) 将集合c包含的所有元素都插入到List集合的index处。
Object get(int index) 返回集合index索引出的元素。
List集合属于泛型集合
List集合,这是我们应用最多的泛型种类,它对应 非泛型ArrayList集合。List属性和方法几乎和ArrayList完全一样。
下面以ArrayList与List<T>为例说明泛型集合的优点及非泛型集合的缺点。
ArrayList numbers = new ArrayList();
numbers.Add(1); //装箱
numbers.Add(2); //装箱
int number = (int)numbers[1]; //拆箱
首先,ArrayList中将所有元素都看成Object类型的,是引用类型。调用Add方法增加两个整数,在这个过程中,整数1,2被CLR装箱(boxing)成object类型的,而后二个元素时又被拆箱(unboxing),装箱与拆箱大体上会发生以下过程
1. 在托管堆中非配一个新的object
2. 基于栈(stack-based)的数据必须移动到刚非配的内存区中
3. 当拆箱时,位于堆中的数据又得移动到栈中
4. 堆中无用的数据进行垃圾回收
当涉及大量装箱与拆箱操作时,必然会影响应用程序的性能。而是用泛型的集合类时就会减少装箱与拆箱的工作,当存在大量数据时,自然可以提高很多性能。
List<int> numbers = new List<int>(); //找不同
numbers.Add(1);
numbers.Add(2);
int number = numbers[1]; //找不同
List集合特点:
元素有序的,且可重复。(元素有序不是指,我们存进Lits集合中的什么1,3,7,6他给我们从小到大,或者从大到小这样子,所谓的有序是我们该集合有下标,下标从0开始,然后我们按照什么顺序增加到list集合的,那么他就是什么样子的顺序)。
List集合遍历:
根据下标,foreach,迭代器遍历数据。
Lits集合扩容:
Lits集合当我们实例出来,它的默认初始容量为10,当往List集合里面增加的数据超过10个以后,他就会扩容增加0.5倍,扩容以后就是15。
新容量 = 原容量 + 原容量 * 0.5
注:vector,ArrayList,LinkedList都是继承List,所以和Lits集合以上三点都是一样的。