java加强 -List集合
List集合是Collection集合下的集合的一种,它有序,可重复,有索引。但由于存在不同的底层实现方法,适合的场景也不同。
ArrayList底层是基于数组存储数据的,而LinkedList底层是基于链表存储数据的。因此,前者因为可以根据索引查询数据,查询数据的速度快,而后者是通过前一个数据找到后一个数据,因此无论找什么数据都得从第一个数字开始寻找。但前者的缺点是增删数据的效率低,若是删除了一个数据连着后面的数据也需要进行改动(前面的数据没了后面的数据需要向前移动一位),而链表没有这个要求,只需要将删除数据前一位的后继改为删除数据的后一位数据,删除数据后一位数据的前驱改为删除数据的前一位数据即可实现删除,时间复杂度为O(1)。因此,两种集合各有特性,适用于不同的应用场景
示例(ArrayList)
package List;import java.util.ArrayList;
import java.util.List;public class ListDemo1 {public static void main(String[] args) {//目标:掌握List系列集合独有的功能//有序,可重复,有索引List<String> names = new ArrayList<>();//添加元素names.add("张三");names.add("李四");names.add("王五");System.out.println(names); //[张三, 李四, 王五]//给第三个数据插入一个数据:赵敏names.add(2,"赵敏");System.out.println(names); //[张三, 李四, 赵敏, 王五]//删除李四,返回删除的元素String remove = names.remove(1); //根据下标删除的数据,返回删除的元素System.out.println(remove);//王五改为金毛System.out.println(names.set(2,"金毛")); //返回修改前的元素System.out.println(names); //[张三, 赵敏, 金毛]//获取张三System.out.println(names.get(0));//遍历支持for循环,增强for,lambda,迭代器}
}
示例(LinkedList)
package List;import java.util.LinkedList;public class ListDemo2 {public static void main(String[] args) {//用LinkedList做一个队列对象LinkedList<String> queue = new LinkedList<>();//入队queue.addLast("赵敏");queue.addLast("陆小果");queue.addLast("橙留香");queue.addLast("梨花诗");queue.addLast("菠萝吹雪");//出队System.out.println(queue.removeFirst());System.out.println(queue.removeFirst());System.out.println(queue);//模拟栈LinkedList<String> stack = new LinkedList<>();stack.push("赵敏");stack.push("陆小果");stack.push("橙留香");stack.push("梨花诗");stack.push("菠萝吹雪");//出栈System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack);}
}
因为LinkedList集合的特有方法(头插,尾插,头删,尾删),模拟栈和队列等数据结构时,使用LinkedList集合更优。