目录
前言:
一、List集合的特有方法
二、List集合的遍历方式有几种?
三、Arraylist集合底层原理
四、LinkedList的特点
前言:
List集合包括JavaList接口以及List接口的所有实现类。List集合中的元素允许重复,各元素的顺序放是对象插入的顺序,类似Java中的数组,用户可通过使用索引(元素在集合中的位置)来访问集合中的元素。
List的最重要的特征就是有序;它会确保以一定的顺序保存元素。List在Collection的基础上添加了大量方法,使之能在序列中间插入和删除元素。(只对LinkedList推荐使用。)
List可以制造ListIterator对象,你除了能用它在List的中间插入和删除元素之外,还能用它沿两个方向遍历List。
一、List集合的特有方法
List集合因为支持索引,所以多了很多索引操作的独特API,其他Collection的功能List也都继承了。
2.代码演示:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/**List* Arraylist Linkedlist 有序、可重复、有索引* LinkList :API* addFirst(E,e) 在该列表开头插入指定的元素* addLast(E,e) 将指定的元素追加到此列表的末尾* getFirst() 返回此列表的第一个元素* getLast() 返回此列表的最后一个元素* removeFirst() 删除并返回第一个元素* removeLast() 删除并返回最后一个元素*/
/**集合并发修改异常问题* 找出某些元素并修改时容易出并发修改异常问题*/
public class List_Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("JAVA");list.add("JAVA");list.add("MYsql");list.add("Python");//在某个索引位置添加数据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, "Myprict"));System.out.println(list);}
}
3.List的实现类的底层原理
ArrayList底层是基于数组实现的,根据查询元素快,增删相对慢;
linkedList底层是基于双链表实现的,查询元素慢,增删首尾元素是非常快的。
二、List集合的遍历方式有几种?
①迭代器
②增强for循环
③Lambda表达式
④for循环(因为List集合存在索引)
4.代码演示:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo2 {public static void main(String[] args) {List<String> lists = new ArrayList<>();lists.add("JAVA");lists.add("JAVA");lists.add("MYsql");lists.add("Python");//1.for循环System.out.println("--------------");for (int i = 0; i < lists.size(); i++) {String ele = lists.get(i);System.out.println(ele);}//2.迭代器System.out.println("--------------");Iterator<String> it = lists.iterator();while (it.hasNext()){String ele = it.next();System.out.println(ele);}//3.foreachSystem.out.println("-----------");for (String ele : lists) {System.out.println(ele);}//4.Lambda表达式System.out.println("--------------");lists.forEach(s -> {System.out.println(s);});}
}
三、Arraylist集合底层原理
Arraylist集合底层是基于数组实现的:根据索引定位元素快,增删需要做元素的移位操作。
第一次创建集合并添加第一个元素的时候,在底层创建一个默认长度为10的数组。
四、LinkedList的特点
底层数据结构是双链表,查询慢,首尾操作的速度是极快的,所以多了很多首尾操作的特有API。
5.LinkedList集合的特有功能
6.代码演示:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/**List* Arraylist Linkedlist 有序、可重复、有索引* LinkList :API* addFirst(E,e) 在该列表开头插入指定的元素* addLast(E,e) 将指定的元素追加到此列表的末尾* getFirst() 返回此列表的第一个元素* getLast() 返回此列表的最后一个元素* removeFirst() 删除并返回第一个元素* removeLast() 删除并返回最后一个元素*/
/**集合并发修改异常问题* 找出某些元素并修改时容易出并发修改异常问题*/
public class List_Demo {public static void main(String[] args) {//LinkedList可以完成队列结构和栈结构(双链表)//栈LinkedList<String> stack = new LinkedList<>();//入栈stack.push("第一颗子弹");stack.addFirst("第二颗子弹");stack.addFirst("第三颗子弹");stack.addFirst("第四颗子弹");stack.addFirst("第五颗子弹");stack.addFirst("第六颗子弹");System.out.println(stack);//出栈System.out.println(stack.removeFirst());System.out.println(stack.pop());System.out.println(stack);System.out.println("==================================");//队列LinkedList<String> queue = new LinkedList<>();//入队queue.offerLast("1号");queue.addLast("2号");queue.addLast("3号");queue.addLast("4号");queue.addLast("5号");//出队System.out.println(queue.removeFirst());System.out.println(queue);
System.out.println("=============================");//结合并发修改异常//迭代器Iterator<String> it = list.iterator();while (it.hasNext()) {String ele = it.next();if ("JAVA".equals(ele)) {
// list.remove("JAVA");//会报错it.remove();//正确}}System.out.println(list);}
}