1.List集合的特点
有序,可重复,有索引
2.List的特有方法(基于index)
//创建一个ArrayList集合
//list有序,可重复的有索引的
List<String > list=new ArrayList<>();//这是一行经典代码
//添加元素
list.add("Java");
list.add("Java");
list.add("张三");
list.add("李四");
//添加元素
list.add(2,"html" );
System.out.println(list);
//删除指定索引的元素,将返回删除的值
System.out.println(list.remove(2));
System.out.println(list);
//根据索引返回指定元素
System.out.println(list.get(2));
//修改指定索引位置的元素,返回修改前的值
System.out.println(list.set(1, "aaaa"));//Java
System.out.println(list);//[Java, aaaa, 张三, 李四]
3.List的循环遍历(多一个for循环遍历方法)
//list有序,可重复的有索引的
List<String > lists=new ArrayList<>();//这是一行经典代码
//添加元素
lists.add("Java");
lists.add("Java");
lists.add("张三");
lists.add("李四");
//for循环
for (int i = 0; i < lists.size(); i++) {
System.out.println(lists.get(i));
}
//迭代器遍历list数组
Iterator<String> it=lists.iterator();
while (it.hasNext()){
String ele=it.next();
System.out.println(ele);
}
//增强for
for (String ele : lists) {
System.out.println(ele);
}
//JDK1.8开始后的Lambda表达式
lists.forEach(s->System.out.println(s));
存在问题:当我们从集合中找到元素并删除时,可能会出现并发修改异常问题
哪些遍历存在问题?
- 迭代器遍历集合且直接用集合删除元素的时候可能出现
- 增强for循环遍历集合且直接删除集合元素的时候可能出现
那种遍历且删除不会出现问题?
- 迭代器遍历结合且用迭代器自己的删除方法操作可以解决
- 使用for循环遍历并删除元素不会存在问题
4.ArrayList
特点:ArrayList底层数据结构是数组实现的,查询较快,增删较慢;
5.LinkedList
特点:底层是基于双链表的数据结构,查询速度比较慢,增删首尾比较快;
//Linked可以完成栈结构(双链表),队列结构
//栈
LinkedList<String> stack=new LinkedList<>();
//压栈 入栈
stack.push("第1颗子弹");
stack.push("第2颗子弹");
stack.push("第3颗子弹");
stack.push("第4颗子弹");
System.out.println(stack);
//出栈 弹栈
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack);
//队列
LinkedList<String> queue=new LinkedList<>();
//入列
queue.addLast("第1个学生");
queue.addLast("第2个学生");
queue.addLast("第3个学生");
queue.addLast("第4个学生");
//出列
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());
System.out.println(queue);