文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

进阶JAVA篇-深入了解 List 系列集合

2023-10-24 17:00

关注

目录

        1.0 List 类的说明

         1.1 List 类的常用方法

        1.2 List 集合的遍历方式

        2.0 ArrayList 集合的底层原理

       2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因:

         2.2 ArrayList 集合的优缺点

        3.0 LinkedList 集合的底层原理

        3.1 从 LinkedList 集合的底层原理来了解具有该特性的原因:

        3.2 LinkedList 集合的优缺点

        3.3 LinkedList 集合的特有方法


        1.0 List 类的说明

        在 Java 中,List 类是 Java 集合框架中的一种接口,它是一种有序的可重复的集合,用于存储多个元素。List 接口Collection 接口子接口它定义了一系列方法来操作和访问列表中的元素,所以 List 接口继承了 Collection 接口的方法。

有关的 Collection 接口的常用 API 介绍在以下链接:

进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式-CSDN博客

         1.1 List 类的常用方法

以代码的形式来介绍这些方法:

import java.util.ArrayList;import java.util.List;public class Text_List {    public static void main(String[] args) {        //由于 List 是一个接口,不能直接去创建对象,        //所以用 List 的实现类来创建一个对象,比如 ArrayList        List list = new ArrayList<>();//这是一行经典的代码!!!        list.add("张三");        list.add("李四");        list.add("王五");        System.out.println(list);        //输出结果为:[张三, 李四, 王五]        //1. add(index, element):在指定位置插入一个元素。        list.add(1,"张麻子");        System.out.println(list);        //输出结果为:[张三, 张麻子, 李四, 王五]        //2. remove(index):移除并返回指定位置的元素。        list.remove(1);        System.out.println(list);        //输出结果为:[张三, 李四, 王五]        //3. set(index, element):将指定位置的元素替换为新的元素。        list.set(1,"张麻子");        System.out.println(list);        //输出结果为:[张三, 张麻子, 王五]        //4. get(index):返回指定位置的元素。        String a = list.get(1);        System.out.println(a);        //输出结果为:张麻子            }}

运行结果为:

        1.2 List 集合的遍历方式

        除了 List 系列集合继承 Collcetion类的三个遍历方式之外,还支持普通的带索引的 for 循环。

 有关的 Collection 类的三个遍历方式的介绍在以下链接:

进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式-CSDN博客

        由于 List 系列集合支持支持有序的,所以可以使用普通带索引的 for 循环。

代码如下:

import java.util.ArrayList;import java.util.List;public class Text_List {    public static void main(String[] args) {        List list = new ArrayList<>();//这是一行经典的代码!!!!        list.add("张三");        list.add("李四");        list.add("王五");        System.out.println(list);        //用普通的 for 循环来遍历以上集合        for (int i = 0; i < list.size(); i++) {            String a = list.get(i);            System.out.println(a);        }    }}

运行结果如下:

        

        2.0 ArrayList 集合的底层原理

        由于 ArrayListList 的实现类,所以 ArrayList 特性与 List 接口是一致的,有序、可重复、有索引的特性。

       2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因:

        ArrayList 集合是基于数组实现的,简单来说,ArrayList 集合就是一个可变长度的数组。因此可以解释为什么 ArrayList 集合具有有序、可重复、有索引的特性,是因为数组都具备这些特性。

        创建的 ArrayList 集合的对象在底层的过程:

        

import java.util.ArrayList;import java.util.List;public class Text_List {    public static void main(String[] args) {        //首先,利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组        List list = new ArrayList<>();//这是一行经典的代码!!!!        //当添加第一个元素的时候,会创建一个新的默认长度为10的数组        list.add("a");    }}

        需要注意的是:

        1. 假如数组存满的时候会创建一个新的已扩容1.5倍的数组,然后将原来旧的数组里面的数据,迁移到新的已扩容的数组中来。

        2. 如果一次添加多个元素,1.5倍还是放不下,则新创建数组的长度以实际为准。

         2.2 ArrayList 集合的优缺点

        因为 ArrayList 是基于数组实现的,所以可以根据数组的特性来了解该集合的优缺点,由于数组是支持索引查找元素的,所以该集合的优点是很明显,查找元素特别的快。但是对于增添、删除、修改的操作来说是很慢的。

        所以 ArrayList 适合:根据索引查询数据。不适合:频繁对元素进行操作。

        3.0 LinkedList 集合的底层原理

        由于 LinkedListList 的实现类,所以 LinkedList 特性与 List 接口是一致的,有序、可重复、有索引的特性,但是与 ArrayList 在底层的原理是不一样的。

        3.1 从 LinkedList 集合的底层原理来了解具有该特性的原因:

        LinkedList 集合是基于双链表实现的。

简答介绍以下双链表:

        链表中的每一个节点都是独立的对象,也就是说内存不是连续的,每一个节点都包含记录上一个节点的地址还有下一个节点的地址、数值。

        3.2 LinkedList 集合的优缺点

        根据该集合的数据结构为双链表,每查询一个元素是从头或者尾一步一步地去查询的,而不能直接去找到其中的元素,所以查询是很慢的。对于增加、删除、修改元素的速度相对来说是快的。但是有两个节点很特殊,对于头、尾节点无论查询还是增加、删除、修改元素速度都很快的。

        所以 LinkedList 集合适合:频繁对元素操作的。不合适:大量的查找元素。

        3.3 LinkedList 集合的特有方法

以代码的形式来介绍:

import java.util.LinkedList;public class Text_LinkedList {    public static void main(String[] args) {        LinkedList list = new LinkedList<>();        list.add("张三");        list.add("李四");        list.add("王五");        System.out.println(list);        //输出结果为:[张三, 李四, 王五]        //1. addFirst() :在该列表开头插入指定的元素        list.addFirst("王麻子");        System.out.println(list);        //输出结果为:[王麻子, 张三, 李四, 王五]        //2. addLast() :将指定的元素追加到此列表的末尾        list.addLast("张麻子");        System.out.println(list);        //输出结果为:[王麻子, 张三, 李四, 王五, 张麻子]        //3. getFirst() :返回此列表中的第一个元素        String a = list.getFirst();        System.out.println(a);        //输出结果为:王麻子        //4. getLast() :返回此列表中的最后一个元素        String b = list.getLast();        System.out.println(b);        //输出结果为:张麻子        //5. removeFirst() :从此列表中删除并返回第一个元素        list.removeFirst();        System.out.println(list);        //输出结果为:[张三, 李四, 王五, 张麻子]        //6. removeLast() :从此列表中删除并返回最后一个元素        list.removeLast();        System.out.println(list);        //输出结果为:[张三, 李四, 王五]    }}

运行结果如下:

        根据 LinkedList 集合的数据结构的特性,其应用场景可以是用设计队列(先进先出,后进后出),还可以用来设计(先进后出,后进先出)。



来源地址:https://blog.csdn.net/Tingfeng__/article/details/133957720

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯