学习笔记21 list

这篇具有很好参考价值的文章主要介绍了学习笔记21 list。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

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

list接口提供了一些方法:

学习笔记21 list,学习,笔记

学习笔记21 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中的其他方法 

学习笔记21 list,学习,笔记

三、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的迭代器还提供了以下方法:

学习笔记21 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),就不需改变。文章来源地址https://www.toymoban.com/news/detail-610718.html

到了这里,关于学习笔记21 list的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC《学习笔记(21版尚硅谷)》

    1、什么是MVC MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业

    2024年02月08日
    浏览(80)
  • web安全学习笔记【21】——安全开发

    安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用 #知识点: 1、 PHP留言板前后端功能实现 2、 数据库创建架构 增删改查 3、 内置超全局变量HTMLJS混编 4、 第三方应用插件传参对象调用 DAY1 #章节点 PHP: 功能: 新闻 列表, 会员中心 , 资源下载 , 留言 版,

    2024年04月14日
    浏览(51)
  • Java学习笔记21——常用API

    在 java.lang 下,使用不需要导包 被 final 修饰,是最终类,没有子类 执行基本数字运算的方法 没有构造方法,直接用类名访问(被static修饰 )。 Math的常用方法 在 java.lang 下,使用不需要导包 被 final 修饰,是最终类,没有子类 System类包含几个有用的类字段和方法。它不能被

    2024年02月07日
    浏览(43)
  • 古月居《ROS入门21讲》零基础学习笔记

    ”怕什么真理无穷,进一寸有一寸的欢喜。” ——古月 适 本人大一小白一枚,参加了一个本科生科研项目,目前正在学习一些ROS1相关的一些前置基础知识。 在这里以博客的形式记录一下学习的过程、操作的细节及操作的结果、爬坑方法、听课笔记。 希望能给同样在学习相

    2023年04月20日
    浏览(32)
  • WPF实战学习笔记21-自定义首页添加对话服务

    定义接口与实现 添加自定义添加对话框接口 添加文件:Mytodo.Dialog.IDialogHostAware.cs 添加自定义添加对话框显示接口 注意dialogHostName应与view中dialoghost 的Identifier属性一致 实现IDialogHostService接口 添加文件:Mytodo.Dialog.DialogHostService.cs DialogHostService实现了自定义的IDialogHostService接口

    2024年02月15日
    浏览(45)
  • lua学习笔记21完结篇(lua中的垃圾回收)

    输出 学习地址  【唐老狮】Unity热更新之Lua语法_哔哩哔哩_bilibili 

    2024年04月15日
    浏览(44)
  • LVGL学习笔记 30 - List(列表)

    目录 1. 添加文本 2. 添加按钮 3. 事件 4. 修改样式 4.1 背景色 4.2 改变项的颜色 列表是一个垂直布局的矩形,可以向其中添加按钮和文本。 部件包含: LV_PART_MAIN - 主要的属性,大部分是这个部件。 LV_PART_SCROLLBAR - 滚动条的属性。 添加一行文本,当字符串长度超过显示时,会自

    2024年02月13日
    浏览(39)
  • 嵌入式学习笔记(21)S5PV210的时钟域详解

    时钟域:MSYS、DSYS、PSYS 因S5PV210的时钟体系比较复杂,内部外设模块太多,因此把整个内部的时钟划分为3大块,叫做3个域。之所以分为3个域,是因为210内部的这些模块彼此工作时钟频率差异太大了,所以又必要把高速的放一起,相对低速的放在一起。 (1)MSYS:CPU(Cortex-

    2024年02月09日
    浏览(44)
  • erlang (Lists 操作模块)学习笔记(二)

    keysearch 在元组 TupleList 列表中搜索 第 N个元素比较等于 Key 的元组。 如果找到这样的元组,则返回 {value, Tuple}, 否则为 false。  keysort   返回一个列表,其中包含列表 TupleList1 的排序元素。排序是在元组的第 N个元素上执行的。排序是稳定的。  keystore  返回 TupleL

    2024年01月24日
    浏览(42)
  • erlang (Lists 操作模块)学习笔记(三)

    suffix   如果 List1 是 List2 的后缀,则返回 true,否则返回 false。 sum   返回 List 中元素的总和。  takewhile   从 List1 中获取元素 Elem,而 Pred(Elem) 返回 true,即 是,该函数返回其列表中最长的前缀 所有元素都满足谓语。Pred 函数必须 返回一个布尔值。 ukeymerge  

    2024年01月25日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包