目录
List集合
特点、特有方法
实例演示
List集合支持的遍历方式
ArrayList集合的底层原理
List集合
我们要了解List集合三点:
- 有什么特点?
- 是否有特有功能?
- 适合什么业务场景?
特点、特有方法
List系列集合特点:有序、可重复、有索引
- ArrayList:有序,可重复,有索引
- LinkedList:有序,可重复,有索引
它们的底层实现不同,适合的场景不同。
List集合的特有方法
- List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也都继承了。
方法名称 | 说明 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
实例演示
import java.util.LinkedList;
import java.util.List;
public class ListDemo1 {
public static void main(String[] args) {
//1.创建一个ArrayList集合对象(有序、可重复、有索引)
List<String> list = new LinkedList<>(); //一行经典代码(常用)
list.add("蜘蛛精");
list.add("至尊宝");
list.add("至尊宝");
list.add("牛夫人");
System.out.println(list); //{蜘蛛精,至尊宝,至尊宝,牛夫人}
//2.public void add(int index,E element):在某个索引位置插入元素
list.add(2,"紫霞仙子");
System.out.println(list); //{蜘蛛精,至尊宝,紫霞仙子,至尊宝,牛夫人}
//3.public E remove(int index) :根据索引删除元素,返回被删除元素
System.out.println(list.remove(2)); //紫霞仙子
System.out.println(list); //{蜘蛛精,至尊宝,至尊宝,牛夫人}
//4.public E get(int index):返回集合中制定位置的元素
System.out.println(list.get(3)); //牛夫人
//5.public E set(int index,E element):修改索引位置处的元素,修改成功后,会返回原来的数据
System.out.println(list.set(3, "牛魔王")); //牛夫人
System.out.println(list); //{蜘蛛精,至尊宝,至尊宝,牛魔王}
}
}
运行结果:
List集合支持的遍历方式
- for循环(因为List集合有索引)
- 迭代器
- 增强for循环
- Lambda表达式
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class ListDemo1 {
public static void main(String[] args) {
//1.创建一个ArrayList集合对象(有序、可重复、有索引)
List<String> list = new LinkedList<>(); //一行经典代码(常用)
list.add("蜘蛛精");
list.add("至尊宝");
list.add("牛夫人");
//1.for循环
for(int i = 0;i < list.size(); i++){
String s = list.get(i);
System.out.println(s);
}
System.out.println();
//2.迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println();
//3.增强for循环(foreach)
for(String s:list){
System.out.println(s);
}
System.out.println();
//4.JDK1.8开始之后的Lambda表达式
list.forEach(s ->{
System.out.println(s);
});
}
}
运行结果:
ArrayList集合的底层原理
- 基于数组实现的。
数组的特点:查询快、增删慢
- 查询速度快(注意:是根据索引查询数据快):查询数据通过地址值和索引定位,查询任意数据耗时相同。
- 删除效率低:可能需要把后面很多的数据进行前移。
- 添加效率极低::可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容。
ArrayList集合的执行流程:
- 利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组
- 添加第一个元素时,底层会创建一个新的长度为10的数组
- 存满时,会扩容1.5倍
- 如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准
ArrayList集合的应用场景
- ArrayList适合:根据索引查询数据,比如根据随机索引取数据(高效)!或者数据量不是很大时!
- ArrayList不适合:数据量大的同时又要频繁的进行增删操作!
END
学习自:黑马程序员——JavaSE课程