List系列集合:ArrayList、LinkedList --java学习笔记

news2024/9/21 18:40:42

List系列集合

特点:有序、可重复、有索引

  • ArrayList:有序、可重复、有索引
  • LinkedList:有序、可重复、有索引

List集合的特有方法

  • List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也都继承了

代码演示:

import java.util.ArrayList;
import java.util.List;

public class ListTest1 {
    public static void main(String[] args) {
        // 1.创建一个ArrayList集合对象(有序、可重复、有索引)
        List<String> list = new ArrayList<>();  //一行经典代码,多态写法
        list.add("愚者");
        list.add("正义");
        list.add("倒吊人");
        list.add("太阳");
        System.out.println(list);   //[愚者, 正义, 倒吊人, 太阳]
        //2.public void add(int index,E element):在某个索引位置插入元素。
        list.add(2,"魔术师");  //在索引位置为2的地方插入元素
        System.out.println(list);   //[愚者, 正义, 魔术师, 倒吊人, 太阳]
        //3.public E remove(int index):根据索引删除元素,返回被删除元素
        String name = list.remove(3);   //删除索引为3的元素并返回
        System.out.println(list);   //[愚者, 正义, 魔术师, 太阳]
        System.out.println(name);   //倒吊人
        // 4.public E get(int index):返回集合中指定位置的元素。
        String name2 = list.get(3);     //返回索引为3的元素
        System.out.println(list);   //[愚者, 正义, 魔术师, 太阳]
        System.out.println(name2);  //太阳
        //5.public E set(int index,E element): 修改索引位置处的元素,修改成功后,会返回原来的数据
        String name3 = list.set(3,"隐者");    //修改索引为3的元素的内容,原内容返回
        System.out.println(name3);  //太阳
        System.out.println(list);   //[愚者, 正义, 魔术师, 隐者]
    }
}

运行结果:

List集合的遍历方式

  1. for循环(因为List集合有索引)
  2. 迭代器
  3. 增强for循环
  4. Lambda表达式

代码演示:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest2 {
    public static void main(String[] args) {
        // 1.创建一个ArrayList集合对象(有序、可重复、有索引)
        List<String> list = new ArrayList<>();  //一行经典代码,多态写法
        list.add("愚者");
        list.add("正义");
        list.add("倒吊人");
        list.add("太阳");
        System.out.println(list);   //[愚者, 正义, 倒吊人, 太阳]
        //(1)for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));   //愚者 正义 倒吊人 太阳
        }
        System.out.println("-------------------------------------");
        //(2)迭代器
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());    //愚者 正义 倒吊人 太阳
        }
        System.out.println("-------------------------------------");
        //(3)增强for循环()
        for (String s : list) {
            System.out.println(s);  //愚者 正义 倒吊人 太阳
        }
        System.out.println("-------------------------------------");
        //(4)JDK 1.8开始之后的Lambda表达式
        list.forEach(System.out::println);  //愚者 正义 倒吊人 太阳
    }
}

运行结果:

ArrayList集合的底层原理

ArrayList集合与LinkedList集合底层采用的数据结构不同,应用场景不同

  • 数据结构:存储、组织数据的方式

ArrayList集合的底层原理

ArrayList集合是基于数组实现的

  • 数组:内存中的一块连续区域,把该区域分成若干个相等的小区域,每个区域都有自己的索引,每个区域都存一个数据
  • 数组的基本特点:
    查询速度快(注意,是根据索引查询数据快)
    删除效率低:
    可能需要把后面很多数据进行前移
    添加效率极低:可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容
  • 总结:查询快,增删慢

Arraylist集合的底层原理:

  • 利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组
  • 添加第一个元素时,底层会创建一个新的长度为10的数组
  • 存满时,会扩容1.5倍
  • 如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准

ArrayList集合适合的应用场景

1、ArrayLis集合t适合:根据索引查询数据比如根据随机索引取数据:(高效)!或者数据量不是很大时!
2、ArrayList集合不适合:数据量大的同时又要频繁的进行增删操作!

LinkedList集合的底层原理

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

什么是链表?

  • 一种数据结构
  • 链表中的结点是独立的对象,在内存中是不连续的,每个结点包含数据值和下一个结点的地址

链表的特点1:查询慢,无论查询哪个数据都要从头开始找
链表的特点2:链表增删相对快

双链表:在记录下一个结点的基础上,也记录了上一个结点的位置

LinkedList的特点:查询慢,增删相对较快,但对首尾元素进行增删改查的速度是极快的

LinkedList新增了:很多首尾操作的特有方法

LinkedList集合适合的应用场景

  • LinkedList的应用场景之一:可以用来设计队列(先进先出,后进后出),只是在首尾增删元素,用Linkecllist来实现很合适!

代码演示:

import java.util.LinkedList;

public class ListTest3 {
    public static void main(String[] args) {
        LinkedList<String> queue = new LinkedList<>();
        //入队
        queue.addLast("one");
        queue.addLast("two");
        queue.addLast("three");
        queue.addLast("four");
        System.out.println(queue);  //[one, two, three, four]
        //出队
        System.out.println(queue.removeFirst());    //one
        System.out.println(queue.removeFirst());    //two
        System.out.println(queue.removeFirst());    //three
        System.out.println(queue);  //[four]
    }
}
  • LinkedList的应用场景之二:可以用来设计栈(后进先出,先进后出),只是在首部增删元素,用Linkecllist来实现很合适!

代码演示:

import java.util.LinkedList;

public class ListTes4 {
    public static void main(String[] args) {
        LinkedList<String> stack = new LinkedList<>();
        //压栈push
        stack.push("第一颗子弹");
        stack.push("第二颗子弹");
        stack.push("第三颗子弹");
        stack.push("第四颗子弹");
        System.out.println(stack);  //[第四颗子弹, 第三颗子弹, 第二颗子弹, 第一颗子弹]
        //出栈pop
        System.out.println(stack.pop());    //第四颗子弹
        System.out.println(stack.pop());    //第三颗子弹
        System.out.println(stack.pop());    //第二颗子弹
        System.out.println(stack);  //[第一颗子弹]
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1537018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(附源码)基于Spring Boot与Vue的宠物用品销售系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31…

如何使用人工智能和ChatGPT来优化营销转化率

人工智能 &#xff08;AI&#xff09; 和营销的交集正在彻底改变企业与客户互动的方式&#xff0c;最终改变营销转化率。人工智能能够分析大量数据、理解模式和自动执行任务&#xff0c;它不仅是一项创新技术&#xff0c;而且是营销领域的根本性转变。这种转变允许更加个性化、…

基于python+vue学生作业管理系统flask-django-nodejs-php

快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省时间和提高工作效率&#xff0c;越来越多的人选择利用互联网进行线上打理各种事务&#xff0c;然后线上管理系统也就相继涌现。与此同时&#xff0c;人们开始接受方便的生活方式…

【并发编程】并发并行,同步异步,线程安全,线程的几种状态并发三要素?创建线程的方法?线程间的通信方式?进程的通信方式?多线程的上下文切换?CAS 算法

目录 并发并行&#xff0c;同步异步&#xff0c;线程安全 线程的几种状态 并发三要素&#xff1f; 创建线程的方法&#xff1f; 线程间的通信方式&#xff1f; 进程的通信方式&#xff1f; 多线程的上下文切换? CAS 算法 并发并行&#xff0c;同步异步&#xff0c;线程…

CICD流水线(发布后端代码)!!!

1、新建流水线 2、添加流水线源 3、测试环节 4、构建上传 ①java构建上传 ②java镜像构建 5、部署 1、Docker部署 6、开启代码推送自动部署 ①开启自动部署 ②找到你代码提交的私有仓库 7、整体叙述 ①&#xff1a;新建流水线 ②&#xff1a;添加流水线源&#xff0c;选择代码…

python发艺美发店管理系统flask-django-php-nodejs

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对发艺美发店管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…

(南京观海微电子)——LCD与OLED优缺点对比

屏幕区别 如何区分OLED屏幕和LCD屏幕&#xff1f; 我们可以通过简单的方式区分OLED屏幕和LCD屏幕&#xff0c;打开一部手机的相机&#xff0c;调整到专业模式&#xff0c;快门调到最高&#xff0c;然后对着点亮的屏幕观察&#xff0c;如果出现规则的条纹就是OELD屏幕&#xff…

基于多态的职工管理系统学习记录

职工管理系统 1、管理系统需求 公司中职工分为三类&#xff1a;普通员工、经理、老板&#xff0c;显示信息时&#xff0c;需要显示职工编号、职工姓名、职工岗位、以及职责 普通员工职责&#xff1a;完成经理交给的任务 经理职责&#xff1a;完成老板交给的任务&#xff0c…

人脸表情识别系统项目完整实现详解——(二)使用SSD模型检测人脸

摘要&#xff1a;人脸检测是人脸表情识别系统中至关重要的一环&#xff0c;其准确性直接影响到整个系统的性能表现。本文介绍了使用SSD模型和OpenCV进行高效人脸检测的完整代码实现。我们详细介绍了SSD人脸检测器的工作原理&#xff0c;包括如何加载预训练的SSD模型&#xff0c…

【C++】1311. 分跳绳

问题&#xff1a;1311. 分跳绳 类型&#xff1a;基本运算、整数运算 题目描述&#xff1a; 学校新买来 m 根跳绳&#xff0c;每个班分 n 根&#xff0c;最多可以分给几个班的同学&#xff0c;还剩多少根&#xff1f;&#xff08;m≥n&#xff09;。 输入&#xff1a; 两个整…

【python绘图colorbar对齐】

[Toc]# 1、问题描述 python在绘图过程中&#xff0c;可能会出现colorbar高度与主图不匹配情况&#xff0c;需要进行调整&#xff0c;使得与主图高度对齐&#xff0c;使图像更美观。示例&#xff1a;colorbar位置高于主图 2、解决方法 通过调整shrink参数匹配对齐,pad调整x轴…

2024 年 AI 辅助研发趋势将更加强调智能化、自动化和个性化

目录 前言 AI辅助研发的技术进展 行业应用案例 医药行业 汽车行业 电子行业 面临的挑战与机遇 技术挑战 伦理问题 数据安全 机遇和解决方案 未来趋势预测 1. 深度融合AI与研发流程 2. 智能研发平台的崛起 3. 强化AI与人类智慧的融合 前言 当谈到人工智能&#xff…

台达变频通过Modbus转Profinet网关可以在环网冗余中使用

Modbus转Profinet网关&#xff08;如XD-MDPN100&#xff09;是一种能够实现Modbus协议与Profinet协议之间转换的设备。它支持Modbus RTU协议和Profinet协议还支持MRP环网冗余系统&#xff0c;,可以通过配置软件进行协议转换&#xff0c;使得原本只能使用Modbus协议的设备可以与…

禁止区域入侵检测

1. 物体检测 Object detection with deep learning and OpenCV In the first part of today’s post on object detection using deep learning we’ll discuss Single Shot Detectors and MobileNets. When combined together these methods can be used for super fast, real…

马蹄集oj赛(双周赛第二十三次)

目录 数列分割 小码哥的地毯 小码哥的三色墙 palace 高数考试 新全排列 黑白双煞 等差 数三角形 区间修改 相对马高 小码哥剪绳子 数列分割 难度:黄金 时间限制:1秒巴 占用内存:64 M 小码哥给你一个长度为n的数列&#xff0c;求将该数列分割成两个左右两个部分且两…

【CVTE 一面凉经Ⅰ】循环依赖如何解决

目录 一.&#x1f981; 开始前的废话二. &#x1f981; 什么是循环依赖&#xff1f;三. &#x1f981;Spring 容器解决循环依赖的原理是什么?五. &#x1f981; 三级缓存解决循环依赖的原理六. &#x1f981; 由有参构造方法注入属性的循环依赖如何解决&#xff1f;七.&#x…

【算法分析与设计】相同的树

题目 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示…

IDEA创建Maven项目实现数据库表查询

在此之前&#xff0c;务必确保你本地环境已经正确配置了 JDK 和 Maven&#xff0c;并且相关的环境变量已经设置。这是你踏上编程之旅的第一步&#xff0c;也是你与代码交互的基础。可通过命令提示符中输入 java -version 和 mvn -v 命令&#xff0c;以验证你的 JDK 和 Maven 是…

多ip多进程代理的实现方法

目录 写在前面 一、背景 二、实现方法 1. 使用多线程处理代理请求 2. 使用多进程处理代理请求 3. 实现多IP代理 三、总结 写在前面 实现多IP多进程代理需要使用Python的多线程和多进程模块。本文将介绍如何使用这些模块来实现多IP多进程代理&#xff0c;并提供相关的代…

蓝桥杯练习——神秘咒语——axios

目标 完善 index.js 中的 TODO 部分&#xff0c;通过新增或者修改代码&#xff0c;完成以下目标&#xff1a; 点击钥匙 1 和钥匙 2 按钮时会通过 axios 发送请求&#xff0c;在发送请求时需要在请求头中添加 Authorization 字段携带 token&#xff0c;token 的值为 2b58f9a8-…