(二十四)List系列集合 |
您所在的位置:网站首页 › 单列集合双列集合 › (二十四)List系列集合 |
目录 前言: 一、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 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 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 it = lists.iterator(); while (it.hasNext()){ String ele = it.next(); System.out.println(ele); } //3.foreach System.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 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 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 it = list.iterator(); while (it.hasNext()) { String ele = it.next(); if ("JAVA".equals(ele)) { // list.remove("JAVA");//会报错 it.remove();//正确 } } System.out.println(list); } } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |