List集合
我们要了解List集合三点:
- 有什么特点?
- 是否有特有功能?
- 适合什么业务场景?
特点、特有方法
List系列集合特点:有序、可重复、有索引
- ArrayList:有序,可重复,有索引
- LinkedList:有序,可重复,有索引
它们的底层实现不同,适合的场景不同。
List集合的特有方法
- List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也都继承了。
实例演示
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