当前位置: 首页 > news >正文

(二十四)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<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.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<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);
    }
}

相关文章:

  • wordpress 音乐播放器/企业网站建设的重要性
  • 如何安装织梦做的网站/网店seo排名优化
  • 北京西城区住房城乡建设委网站/常州免费网站建站模板
  • 我想看b站直播怎/搜索引擎排名优化技术
  • 巴彦淖尔 网站建设/alexa排名查询
  • 不备案怎么做网站/百度搜索推广产品
  • restful接口
  • Linux进程控制(进程替换)
  • 选购自主可控全国产交换机时, IP防护等级多少比较合适?
  • 初学者C语言练习题-指针
  • “笨办法”学Python 3 ——练习 33 While 循环
  • [面试题]java高性能的多计数器
  • Softmax Loss、AAM-Softmax(ArcFace)、Sub-center ArcFace的PyTorch实现与代码解读
  • 基于paddlex图像分类模型训练(一):图像分类数据集切分:文件夹转化为imagenet训练格式
  • 【021·未解】1947. 最大兼容性评分和【暴力回溯】
  • (1分钟速览)KBM-SLAM 论文阅读笔记
  • Linux:查看服务器信息,CPU、内存、系统版本、内核版本等
  • 8.框架Spring