List集合
特点:有序,可重复,有索引
-
ArrayList
-
LinkedList
List集合特有方法
-
List集合因为支持索引,所以多了很多与索引有关的方法,Collection的功能List也都继承了
package itheima.demo.List; import java.util.List; import java.util.ArrayList; public class List1 { public static void main(String[] args) { List<String> names = new ArrayList<>();//经典代码 //添加数据 names.add("张三"); names.add("李四"); names.add("王五"); System.out.println(names); //在第三个位置插入”赵六” names.add(2,"赵六"); //删除李四 names.remove("李四"); //把王五改为哈哈 names.set(2,"哈哈"); System.out.println(names); } }
List集合支持的遍历方式
-
for 循环(List集合有索引)
//for循环 for (int i = 0; i < names.size(); i++) { System.out.println(names.get(i)); } //迭代器 Iterator<String> iterator = names.iterator(); while (iterator.hasNext()) { String name = iterator.next(); System.out.println(name); } //增强for for (String name : names) { System.out.println(name); } //Lambda表达式 names.forEach(name-> System.out.println(name));
ArrayList LinkedList 区别
底层采用的数据结构不同,应用场景不同
数据结构:存储,组织数据的方式
ArrayList的底层原理
-
ArrayList底层是基于数组存储数据的
-
LinkedList底层是基于链表存储数据的
数组特点:
-
查询速度快,根据索引查询数据块
-
增删数据效率低,可能需要把后面很多数据进行前移
LinkedList的底层原理
链表的特点:
-
链表中的数据是一个一个独立的结点组成的,结点在内存中不连续,每个结点包含数据值和下一个结点的位置
-
查询慢,无论查询哪个数据都要从头开始寻找
-
链表增删相对快
-
基于双链表实现
-
对首尾元素进行增删查改的速度极快
LinkedList新增了很多首尾操作的特有方法
LinkedList应用场景之一,可以用来设计队列
package itheima.demo.List; import java.util.LinkedList; public class List2 { public static void main(String[] args) { //LinkedList做一个队列对象 LinkedList<String> queue = new LinkedList<>(); //入队 queue.addLast("张三"); queue.addLast("李四"); queue.addLast("王五"); System.out.println(queue); //出队 queue.removeFirst(); System.out.println(queue); } }
LinkedList应用场景之一,可以用来设计栈
package itheima.demo.List; import java.util.LinkedList; public class List3 { public static void main(String[] args) { LinkedList<String> stack = new LinkedList<>(); //压栈 stack.push("张三"); stack.addFirst("李四"); stack.addFirst("王五"); System.out.println(stack); //出栈 stack.removeFirst(); stack.pop(); System.out.println(stack); } }