List集合的存储特点
1.元素有序-元素存放和取出顺序一致
2.元素有下标-可以通过下标来访问集合中元素
3.元素可以重复-可以存放相同元素
首先,我们需要知道List并不是一个类而是一个Collection的子接口,如果我们想要使用List集合,那么我们需要使用List接口对应的实现类。
List集合的常用实现类
- 第一个实现类是:ArrayList-底层由数组来存储数据,增删元素所需要消耗的时间多,查询消耗的时间少,jdk1.2,线程不安全,效率高。
- 第二个实现类是:LinkedList-底层由链表存储数据,增删元素速率快,擦查询消耗时间多,jdk1.2,线程不安全,效率高。
- 第三个实现类是:Vector-底层由数组实现,jdk1.0版本早,对查询的也加了同步锁,所以增删和查询的速度都慢,线程安全,效率低。
常用方法
- boolean add(值): 向集合末尾添加元素
- void add(下标, 值): 在指定下标位置插入元素
- boolean addAll(集合名): 将指定集合元素添加到当前集合末尾
- boolean addAll(下标, 集合名): 将指定集合元素添加到当前集合指定下标位置
- boolean contains(值): 判断集合是否包含指定值
- boolean containsAll(集合名): 判断当前集合是否包含指定集合的所有元素
- 值 get(下标): 获取指定下标位置值
- int indexOf(值) : 获取值第一次出现的下标, 不存在返回-1
- int lastIndexOf(值): 获取值最后一次出现的下标, 不存在返回-1
- 值 remove(下标): 删除指定下标位置的值, 并将此值返回
- boolean remove(值): 删除指定匹配元素(只删首个)
- 当集合中的元素也为整型时, 无法传入元素删除.会优先认定传入元素为下标
- 旧值 set(下标, 新值): 将指定下标位置的值替换为新值
- int size(): 获取集合元素个数
List集合的遍历
总共有四种方式
第一种下标遍历
使用for循环
for(int i=0; i< 集合名.size(); i++){
//通过集合名.get(i)获取当前遍历元素
}
第二种自遍历
利用集合的foreach方法,传入一个Consumer的接口实现类对象
//自遍历-匿名内部类
list.forEach(new Consumer<Integer>() {
@Override
public void accept(Integer i) {
System.out.print(i+" ");
}
});
这种方法可以使用Lambda来简化
//自遍历-lambda
list.forEach(i-> System.out.print(i+" "));
第三种外遍历
使用增强for循环
for(泛型 元素名 : 集合名){
//元素名(随便起)对应的就是集合正在被遍历的值
}
第四种迭代器遍历
这种方法需要先创建迭代器对象
Iterator<集合泛型> it = 集合名.iterator();
while (it.hasNext()){//存在下一元素
//指针后移
//通过it.next()得到下一元素
}
注:
只有下标遍历过程中可以增加删除元素
子遍历过程中无法使用累加器和标识变量