学习笔记21 list

news2024/10/7 10:22:11

一、概述

有两种不同的方法来实现List接口。ArrayList类使用基于连续内存分配的实现,而LinkedList实现基于linked allocation

list接口提供了一些方法:

 二、The ArrayList and LinkedList Classes

1.构造方法

这两个类有相似的构造方法:

ArrayList()
 ArrayList(int initialCapacity)
 ArrayList(Collection<? extends E> c)
LinkedList()
 LinkedList(Collection<? extends E> c)

使用第三种构造方法可以将list转为arraylist:

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

public class ArrayListDemo {
    public static void main(String[] args) {
        // 创建一个包含一些整数的列表
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 使用 ArrayList(Collection<? extends E> c) 构造方法创建一个新的 ArrayList 对象
        ArrayList<Integer> arrayList = new ArrayList<>(numbers);

        // 打印 ArrayList 的内容
        System.out.println(arrayList);
    }
}

用for循环将数组转为linkedlist: 

// Initialize array of names.
 String [] namesArray = {"Anna", "Bob", "Carlos", "Debby"};
 // Create empty list.
 LinkedList<String> list1 = new LinkedList<>();
 // Populate the list using a loop.
 for (String s : namesArray)
 {
    list1.add(s);
 }
 System.out.println(list1);

注意,java中的collection都自带toString方法,结果如下:

[Anna, Bob, Carlos, Debby]

 2.asList

我们可以不用for循环遍历,而直接把一个array转化为linkedlist或arraylist:

// Initialize array of names.
String[] namesArray = {"Anna", "Bob", "Carlos", "Debby"};

// Create LinkedList from array using constructor.
 LinkedList<String> linkedList = new LinkedList<>(Arrays.asList(namesArray));

也可以这样:

LinkedList list2 =
 new LinkedList<>(Arrays.asList("Anna", "Bob", "Carlos", "Debby"));

3.linkedlist中的其他方法 

三、List Iterators

迭代器可以在列表中向前或向后移动。除了 next() 方法外,列表迭代器还有一个 previous() 方法,列表迭代器有一个光标位置,它总是位于调用 previous() 方法返回的元素和调用 next() 方法返回的元素之间。

最初,光标位于索引为 0 的元素之前。调用 next() 时,光标将返回索引为 0 的元素,并越过返回的元素向前移动到元素 0 和元素 1 之间的位置。此时,调用 previous() 将返回元素 0,并将光标移回起点,但调用 next() 将返回元素 1,并将光标向前移动到元素 1 和元素 2 之间的位置。如果光标已经越过最后一个元素,调用 next() 将抛出 NoSuchElementException 异常。同样,如果光标位置在元素 0 之前,调用 previous() 也会产生同样的异常。

列表迭代器中的 remove() 方法会从列表中删除最后一次调用 next() 或 previous() 时返回的元素

也就是说,如果在调用 `remove()` 方法之前没有先调用 `next()` 或 `previous()` 方法,那么会抛出一个 `IllegalStateException` 异常。

这是因为 `remove()` 方法的作用是删除迭代器最后访问的元素,所以在调用 `remove()` 方法之前必须先调用 `next()` 或 `previous()` 方法,以确保迭代器已经指向了要删除的元素。

如果在调用 `remove()` 方法之前没有先调用 `next()` 或 `previous()` 方法,那么迭代器没有指向任何元素,也就无法删除元素,因此会抛出 `IllegalStateException` 异常。

这里的迭代器的remove方法和list的remove方法不是一个东西,自然不能按原来的方式理解。

list的迭代器还提供了以下方法:

 例子:

import java.util.*;

/**
 * Demonstrates the list iterator
 */
public class ListIteratorDemo {
    public static void main(String[] args) {
        // Create an array list to hold strings.
        String[] names = {"Chris", "David", "Katherine", "Kenny"};
        List<String> nameList = new ArrayList<>(Arrays.asList(names));

        // Display the names in the list.
        System.out.println("Here are the original names.");
        System.out.println(nameList);

        // Get a list iterator.
        ListIterator<String> it = nameList.listIterator();

        // Add "Darlene" to the list right after "Chris".
        while (it.hasNext()) {
            String str = it.next();
            // If the last name retrieved was "Chris"
            // then insert "Darlene".
            if (str.equalsIgnoreCase("Chris")) {
                it.add("Darlene");
                // We are done
                break;
            }
        }

        //Display the names in the list again.
        System.out.println("\nHere are the new names now.");
        System.out.println(nameList);
    }
}

Here are the original names.

[Chris, David, Katherine, Kenny]

Here are the new names now.

[Chris, Darlene, David, Katherine, Kenny]

 四、用list接口变量去引用linkedlist或arraylist

推荐使用

List<String> nameList = new ArrayList<>();

而不是

 ArrayList<String> nameList = new ArrayList<>();

因为第一种方法后期容易修改。

比如在后期发现namelist实际上应该使用linkedlist,这是只需要把第一句改成:

List<String> myList = new LinkedList<>();

这时,项目中所有的myList就都变成了Linkedlist。

如果用第二种方法,我们在项目中别的地方传参的时候,会传入(arraylist nameList),这时如果要换成Linkedlist,我们需要改变所有传入参数的类型。

使用第一种方法,我们传的参数是(List nameList),就不需改变。

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

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

相关文章

数据结构--串、数组、广义表

这里写目录标题 串定义案例引用串的类型定义以及存储结构抽象类型定义存储结构(顺序表较为常用)顺序存储结构链式存储结构 串的模式匹配算法&#xff08;查找主串中是否有某个字串&#xff09;BF算法KMP算法设计思想对字串的回溯进行了优化代码对next【j】进行优化 数组类型一维…

C#,数值计算——Kolmogorov-Smirnov累积分布函数的计算方法与源程序

using System; namespace Legalsoft.Truffer { /// <summary> /// Kolmogorov-Smirnov累积分布函数 /// Kolmogorov-Smirnov cumulative distribution functions /// and their inverses. /// </summary> public class KSdist { …

【网络编程】(TCP流套接字编程 ServerSocket API Socket API 手写TCP版本的回显服务器 TCP中的长短连接)

文章目录 网络编程TCP流套接字编程ServerSocket APISocket APITCP中的长短连接手写TCP版本的回显服务器 网络编程 TCP流套接字编程 TCP提供的API主要是两个类:ServerSocket 和 Socket . TCP不需要一个类来表示"TCP数据报"因为TCP不是以数据报为单位进行传输的.是以…

电机故障诊断(python程序,模型为CNN结合LSTM)

代码运行环境要求&#xff1a;TensorFlow版本>2.4.0&#xff0c;python版本>3.6.0 运行效果视频&#xff1a;电机故障诊断&#xff08;python代码&#xff09;_哔哩哔哩_bilibili 1.电机常见的故障类型有以下几种&#xff1a; 轴承故障&#xff1a;轴承是电机运转时最容…

用于永磁同步电机驱动器的自适应SDRE非线性无传感器速度控制(MatlabSimulink实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码&Simulink仿真实现 &#x1f4a5;1 概述 本文方法基于状态依赖的里卡蒂方程&#xff08;SDRE&#xff09;控制技术及其梯度型神经网络的实时计算方法&#xff0c;允许…

Gorm中Belong to 自引用

//评论 type Comment struct {gorm.ModelContent string //内容ParentID uint //评论的父级评论idParentComment *Comment gorm:"foreignkey:ParentID;references:ID" //重写外键与重写引用 gorm的belongTo关系 }func One2one() {GLOAB_DB.AutoMigrate(&Commen…

Latex error——Unknown graphics extension: .eps解决办法

1. 问题描述 使用PDFTeXify进行编译出现错误 2. 错误原因 使用includegraphics插入图片为eps格式&#xff0c;此种方法只能用latex默认编译器使用&#xff0c;如果使用pdflaTex则不能插入.eps格式图片。 3. 解决办法 在开头添加 \usepackage{epstopdf}

专项练习-04编程语言-03JAVA-01

1. 以下有关构造方法的说法&#xff0c;正确的是&#xff1a;&#xff08;&#xff09; A 一个类的构造方法可以有多个 B 构造方法在类定义时被调用 C 构造方法只能由对象中的其他方法调用 D 构造方法可以和类同名&#xff0c;也可以和类名不同 正确答案&#xff1a;A 官方解析…

使用Anaconda3创建pytorch虚拟环境

一、Conda配置Pytorch环境 1.conda安装Pytorch环境 打开Anaconda Prompt&#xff0c;输入命令行&#xff1a; conda create -n pytorch python3.6 ​ 输入y&#xff0c;再回车。 稍等&#xff0c;便完成了Pytorch的环境安装。我们可以利用以下命令激活pytorch环境。 conda…

比XShell更好用,更现代的终端工具-Tabby

目录 简介&#xff1a;Tabby 是一名老外在 Github 开源的终端连接的工具&#xff0c; 安装教程&#xff1a; SSH连接功能&#xff1a; SFTP文件传输功能&#xff1a; 设置&#xff1a; 简介&#xff1a;Tabby 是一名老外在 Github 开源的终端连接的工具&#xff0c; Tabby 的…

进制和进制转换

什么是进制 进制的全称是进位计数制&#xff0c;是人为定义的带进位的计数方法&#xff0c;对于任何一种X进制&#xff0c;就表示每一位置上的数运算时都是逢 X进一位。 十进制是逢十进一&#xff0c;十六进制是逢十六进一&#xff0c;二进制就是逢二进一&#xff0c;以此类推…

数据出境要依法“过安检”!什么是数据出境?

为了规范数据出境活动&#xff0c;保护个人信息权益&#xff0c;维护国家安全和社会公共利益&#xff0c;促进数据跨境安全、自由流动。从2022年9月1日起&#xff0c;《数据出境安全评估办法》施行。什么是数据出境&#xff0c;什么情况下需要进行数据出境安全评估呢&#xff1…

windows下安装composer

安装Php 教程 下载composer 官网 中文网站 exe下载地址 下载好exe 双击运行 找到php.ini注释一行代码 测试 composer -v说明安装成功 修改源 执行以下命令即可修改 composer config -g repo.packagist composer https://packagist.phpcomposer.com # 查看配置…

基于springboot+mybatis +mysql+jsp图书管理系统

基于springbootmybatis mysqljsp图书管理系统 一、系统介绍二、功能展示1.用户登陆2.用户注册3.图书借阅(学生)4.我的借阅&#xff08;学生&#xff09;5.图书管理&#xff08;管理员&#xff09;6.用户管理&#xff08;管理员&#xff09;7.借阅信息&#xff08;管理员&#x…

VScode中python的相对路径与绝对路径 FileNotFoundError: [Errno 2] No such file or directory

VScode中&#xff0c;python里的相对路径是相对于当前工作目录来定位的&#xff0c;而当前的工作目录在VScode中下方的终端窗口会有提示&#xff1a; 说明此时的工作目录并非当前python文件所在的目录&#xff0c;而是C:\Users\xxxxx(你的用户名)。因此&#xff0c;使用VScode…

【Apollo学习笔记】—— Cyber RT之创建组件

文章目录 前言0. 前置知识0.1 什么是 Component0.2 Component 的类型0.3 Component 的创建及工作流程0.4 Component 如何被加载0.5 Component 的优点 1. 初始化组件的目录结构2. 实现组件类2.1 头文件2.2 源文件2.3 创建 BUILD 文件 3. 设置配置文件3.1 配置 DAG 文件3.2 配置 …

每克卖1.67亿美元——内嵌富勒烯

英国牛津大学的科学家宣称&#xff0c;一个叫做Designer Carbon Materials的实验室正在生产内嵌富勒烯&#xff0c;而且还以3.2万美元的天价出售了200微克。 内嵌富勒烯于1985年被首次发现&#xff0c;它是由碳原子组成的球形结构。因其形状而被昵称为“巴基球”。60个碳原子组…

Java8实战-总结7

Java8实战-总结7 通过行为参数化传递代码真实的例子用Runnable执行代码块GUI事件处理 小结 Lambda表达式Lambda管中窥豹 通过行为参数化传递代码 真实的例子 用Runnable执行代码块 线程就像是轻量级的进程&#xff1a;它们自己执行一个代码块。但是&#xff0c;怎么才能告诉…

QT实现连接MySQL数据库以及查询等操作

QT实现连接数据库以及查询等操作 目录 QT实现连接数据库以及查询等操作实现效果建立数据库代码实现文件结构连接数据库增删改查 所用类及其函数解释源代码后面的话 实现效果 功能包含数据库的增删改查和界面的显示&#xff0c;因为没有用.ui文件所以控件的位置都是手动设置的&a…

【AI应用如何决策?如何研发出安全可信的AI应用?《Python可解释AI(XAI)实战》告诉你】

怎样才能有效地向A业务和利益相关者解释Al的决策?你需要仔细规划、设计和可视化。要解决的问题、模型以及变量之间的关系通常是微妙、出乎意料和复杂的。 《Python可解释AI&#xff08;XAI&#xff09;实战》通过几个精心设计的项目让你在实践中掌握众多XAI工具和方法&#x…