List接口与实现类

news2025/7/22 16:23:01

目录

一、List接口

1.特点:

2.方法:

二、List接口的使用

三、List实现类

1.ArrayList(重点)

(1)特点

(2)示例

(3)源码分析

2.Vector

(1)特点

(2)示例

3.LinkedList

(1)特点

(2)示例

四、ArrayList和LinkedList的区别

1.ArrayList     数组

2.LinkedList    双向链表


一、List接口

1.特点:

有序、有下标、元素可以重复。

2.方法:

1.在index位置插入对象o

void add(int index,Object o)

2. 将一个集合中的元素添加到此集合中的index位置

boolean addAll(int index,Collection c)

3. 返回集合中指定位置的元素

Object get(int index)

4. 返回fromIndex和toIndex之间的集合元素

List subList(int fromIndex,int toIndex)

二、List接口的使用

详见代码注解:

重点都在注释      重点都在注释      重点都在注释      

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

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

/**
 * List子接口使用
 * 特点:1.有序 有下标
 * 特点:2.可以重复
 */
public class Test03 {
    public static void main(String[] args) {
        //1.先创建集合对象
        List list = new ArrayList<>();
        //添加元素
        list.add("苹果");
        list.add("葡萄");
        list.add(20);
        list.add(46);
        list.add(56);
        list.add("香蕉");
        list.add("橘子");
        list.add(1, "梨子");
        System.out.println("元素个数:" + list.size());
        System.out.println(list.toString());
        System.out.println("----------------");

        //2.删除元素(字符串)
        list.remove(1);
        System.out.println("删除之后的个数:" + list.size());
        System.out.println(list.toString());
        System.out.println("----------------");

        //删除数字
        // 直接删除角标
        list.remove(2);
        System.out.println(list.toString());
        System.out.println("----------------");

        //转为Object
        list.remove((Object) 46);
        System.out.println(list.toString());
        System.out.println("----------------");
        //new Integer
        list.remove(new Integer(56));
        System.out.println(list.toString());
        System.out.println("----------------");

        //3.遍历
        //(1)有角标,可以使用for循环遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("----------------");

        //(2)使用增强for
        for (Object objiect : list) {
            System.out.println(objiect);
        }
        System.out.println("----------------");

        //(3)使用迭代器  只能往后遍历
        Iterator it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        System.out.println("----------------");

        //(4)列表迭代器     可以逆向遍历,任意方向,添加、删除、修改元素
        ListIterator lit = list.listIterator();
        while (lit.hasNext()) {
            System.out.println(lit.nextIndex() + ":" + lit.next());  //从前往后遍历
        }
        System.out.println("----------------");
        while (lit.hasPrevious()) {
            System.out.println(lit.previousIndex() + ":" + lit.previous());  //从后往前遍历
        }
        System.out.println("----------------");

        //4.判断
        System.out.println(list.contains("苹果"));
        System.out.println(list.isEmpty());
        System.out.println("----------------");

        //5.获取位置
        System.out.println(list.indexOf("葡萄"));
        System.out.println("----------------");

        //6.返回子集合  subList
        List list1 = list.subList(1,3);   //包含角标1的元素,不包含角标3的元素
        System.out.println(list1.toString());
    }
}

三、List实现类

1.ArrayList(重点)

(1)特点

数组结构实现,查询快、增删慢

运行效率快,线程不安全

(2)示例

详见代码注解:

重点都在注释      重点都在注释      重点都在注释      

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 


import com.scaaner.Student;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

/**
 * ArrayList的使用
 * 存储结构:数组    查找遍历快   增删慢  比较
 */
public class Test01 {
    public static void main(String[] args) {
        //创建集合
        ArrayList arraylist = new ArrayList<>();
        //1.添加元素
        Student s1 = new Student("A",20);
        Student s2 = new Student("B",22);
        Student s3 = new Student("C",24);
        Student s4 = new Student("D",27);
        arraylist.add(new Student("A",20));
        arraylist.add(s2);
        arraylist.add(s3);
        arraylist.add(s4);
        System.out.println("元素个数:"+arraylist.size());
        System.out.println(arraylist.toString());
        System.out.println("------------------------------");
        //2.删除元素
        arraylist.remove(s1);
        System.out.println("删除之后个数:"+arraylist.size());
        System.out.println(arraylist.toString());
        System.out.println("------------------------------");
        //3.遍历元素
        //(1)迭代器
        Iterator iterator = arraylist.iterator();
        while(iterator.hasNext()){
            Student s = (Student) iterator.next();
            System.out.println(s.toString());
        }
        System.out.println("------------------------------");
        //(2)列表迭代器
        ListIterator listIterator = arraylist.listIterator();
        while(listIterator.hasNext()){
            Student student = (Student) listIterator.next();
            System.out.println(student.toString());
        }
        System.out.println("------------------------------");
        while(listIterator.hasPrevious()){
            Student student1 = (Student) listIterator.previous();
            System.out.println(student1.toString());
        }
        //4.判断
        System.out.println(arraylist.contains(new Student("A",20)));
        System.out.println(arraylist.isEmpty());
        System.out.println("------------------------------");
        //5.查找
        System.out.println(arraylist.indexOf(s2));
    }
}

用equals判断两元素是否相等:↓↓↓

(3)源码分析

向集合添加元素后,默认容量:DEFAULT_CAPACITY = 10;如果没有添加任何元素,容量为0。

每次扩容的大小是原来的1.5倍。

存放元素的数组:elementData

实际元素个数:size

添加元素:add()

2.Vector

(1)特点

数组结构实现,查询快、增删慢

运行效率慢,线程安全

可实现可增长的对象数组

(2)示例

详见代码注解:

重点都在注释      重点都在注释      重点都在注释      

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

import java.util.Enumeration;
import java.util.Vector;

/**
 * Vector集合的使用
 * 存储结构:数组
 */
public class Test02 {
    public static void main(String[] args) {
        //创建集合
        Vector vector = new Vector<>();
        //1.添加元素
        vector.add("菠萝");
        vector.add("橘子");
        vector.add("糯叽叽");
        vector.add("芒果");
        System.out.println(vector.toString());
        System.out.println("-------------------");
        //2.删除
        vector.remove(1);
        //vector.clear();       //清空
        System.out.println(vector.toString());
        System.out.println("-------------------");
        //3.遍历
        //可以使用for循环,增强for循环,迭代器
        //使用枚举器
        Enumeration elements = vector.elements();
        while(elements.hasMoreElements()){
            String s =(String) elements.nextElement();
            System.out.println(s);
        }
        System.out.println("-------------------");
        //4.判断
        System.out.println(vector.contains("苹果"));
        System.out.println(vector.isEmpty());
        System.out.println("-------------------");
        //5.其他方法
        System.out.println(vector.firstElement());   //枚举第一个元素
        System.out.println(vector.lastElement());   //枚举最后一个元素
    }
}

3.LinkedList

(1)特点

链表结构实现(双向链表),查询慢、增删快

(2)示例

详见代码注解:

重点都在注释      重点都在注释      重点都在注释      

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

import com.scaaner.Student;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;

/**
 * LinkedList的使用
 * 存储结构:双向链表
 */
public class Test01 {
    public static void main(String[] args) {
        //创建集合
        LinkedList linkedList = new LinkedList<>();
        //1.添加元素
        Student s1 = new Student("A",20);
        Student s2 = new Student("B",22);
        Student s3 = new Student("C",24);
        Student s4 = new Student("D",27);
        linkedList.add(s1);
        linkedList.add(s2);
        linkedList.add(s3);
        linkedList.add(s4);
        System.out.println("元素个数:"+linkedList.size());
        System.out.println(linkedList.toString());
        System.out.println("-----------------------");
        //2.删除   remove     清空 clear
        //3.遍历
        //(1)for
        for (int i = 0; i <linkedList.size(); i++) {
            System.out.println(linkedList.get(i));
        }
        System.out.println("-----------------------");
        //(2)增强for循环
        for (Object object : linkedList){
            Student s = (Student) object;
            System.out.println(s.toString());
        }
        System.out.println("-----------------------");
        //(3)使用迭代器
        Iterator iterator =linkedList.iterator();
        while(iterator.hasNext()){
            Student s = (Student) iterator.next();
            System.out.println(s.toString());
        }
        System.out.println("-----------------------");
        //(4)使用列表迭代器
        ListIterator listIterator =linkedList.listIterator();
        while(iterator.hasNext()){
            Student s = (Student) listIterator.next();
            System.out.println(s.toString());
        }
        System.out.println("-----------------------");
        //4.判断    contains(是否存在)    isEmpty(是否为空)
        //5.获取某元素的位置     indexOf()
        }
}

四、ArrayList和LinkedList的区别

1.ArrayList     数组

 必须开辟连续空间,查询快,增删慢。

2.LinkedList    双向链表

无需开辟连续空间,查询慢,增删快。


简单粗暴!

感谢ლ(°◕‵ƹ′◕ლ)!!!

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

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

相关文章

Python列表推导式——List

目录 遍历列表 range函数 列表推导式(★★★★★)五星技能点 五万次【列表推导式】与【for】遍历计算消耗时间对照表&#xff1a; 列表推导式逻辑判断 遍历列表 通过for in循环来遍历集合列表 range函数 我们基础range函数是参数范围是range(start,stop)&#xff0c;在下…

利用天翎知识文档+群晖NAS搭建企业知识库,享用智能检索

编者按&#xff1a;检索是知识文档管理中常见切十分重要的功能&#xff0c;搭建企业知识库必不可少。本文分析了智能检索的特点&#xff0c;并介绍了其在知识文档管理系统中的实现。 关键词&#xff1a;智能检索&#xff0c;移动端&#xff0c;群晖NAS 知识管理中的检索功能 …

基于Java+SpringBoot+Mybaties+Vue 在线问卷调查系统设计与实现

一.项目介绍 本项目 可支持注册、登录 创建问卷、设置问卷内容&#xff08;支持单选、多选、问答题&#xff09; 分享问卷链接、分析问卷 查看问卷库、以及填写问卷内容 等功能 该项目采用 Springboot Mybaties Vue element UI 框架实现 二.环境需要 1.运行环境&#xff1…

教育科技创新即将崛起

随着“双减”政策的不断落实&#xff0c;真正具有创新精神和懂得教育科技的人&#xff0c;他们所创造的新模式、新生态即将崛起&#xff0c;属于教育科技和创新的春天即将到来。 那么&#xff0c;教育科技化和创新在不同的教育场景有什么体现呢&#xff1f; 我们先来看看目前…

【雷达通信】雷达探测项目仿真(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

OCR-paddleocr

PaddleOCR 分为 Detection&#xff08;文本检测&#xff09;、Direction classifier&#xff08;方向分类器&#xff09;和 Recognition&#xff08;文本识别&#xff09;三部分&#xff0c;因此需要三个模型。一、介绍 PaddleOCR是一款超轻量、中英文识别模型目标是打造丰富、…

【软件测试】测试人填坑?测试工作中的坑成长经历,填着填着就成了神......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小刘&#xff1a; 之…

深度强化学习DRL现存问题和训练指南(D3QN(Dueling Double DQN))

目录 强化学习 问题 好用的算法标准 表现好 减小学习曲线的波动 On-Policy和off-Policy区别 学习方式 采样数据利用 学习本质 优缺点 DQN 创新点 优点 缺点 MDP和POMDP 结果图 DQN DDQN Dueling DQN 参数 iteration episode epoch Batch_Size Experime…

全新电商版本答案——全民拼购,越拼越得,白嫖产品不是梦

根据国家市场监督管理总局自2020年12月1日起发布的《规范促销暂行规定》第十二条的规定&#xff0c;为了推广自己的平台商城或商品&#xff0c;获取流量&#xff0c;采用新购买模式运营的平台通过附带给未被选中的参与者一定的奖金或者其他利益&#xff0c;属于有奖销售。 在此…

RS编码译码误码率性能matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 纠错编码技术在卫星通信、移动通信及数字存储等领域已获得了广泛的应用。RS码作为其中最重要的码类之一,具有优良的纠随机错误和突发错误的能力,被空间数据系统咨询委员会(CCSDS)作为一种…

记录安装Cytoscape的过程

一、安装前的准备工作 1、先java 看了大佬们的安装教程&#xff1a; 看到说先要安装对应的Java才能下载相应的cytoscape&#xff0c;因cytoscape是基于java的软件。 cytoscape安装教程1 cytoscape安装教程2 然后&#xff0c;自查了自己电脑上的Java版本,应该为jdk 11&#x…

【js】【爬虫】fetch + json-server 快速搭建爬虫服务器环境及数据后续处理(突破session缓存大小限制)

文章目录导读需求开发环境json-server使用安装json-server创建数据文件db.json运行服务器修改默认端口json-server提供的线上服务&#xff08;不推荐&#xff09;fetch上传数据到json-server服务器通过fetch新增数据报错Error: Insert failed, duplicate id数据后续处理打开导入…

ShellBrowser Delphi,Delphi组件功能和工具

ShellBrowser Delphi,Delphi组件功能和工具 ShellBrowser基本上被描述为集合的一部分&#xff0c;它能够为用户和开发人员提供Delphi的程序员&#xff0c;以便轻松灵活地访问windows shell性能。ShellBrowserComponents Delphi的使用基本上是能够模拟windows资源管理器的变体。…

阅读源码时:idea中如何使用todo标记、活动模板 (史上最全)

接下来&#xff0c; 尼恩要带大家 完成一个 超级牛逼的 大厂offer 收割机项目—— 100Wqps 三级组件 实操&#xff0c; 实操中&#xff0c;用到 caffeine 并且&#xff0c;尼恩要带大家 穿透式 、起底式的 学习 caffeine 的源码和架构&#xff0c; caffeine 的源码 特别复杂…

Linux之service服务-实现程序脚本开机自启

一、什么是.service文件&#xff1f; Linux中.service文件是某项服务对应的配置文件&#xff0c;可用于systemd管理和控制的服务的设置。 .service 文件通常包含3个模块&#xff1a; [Unit] 控制单元&#xff0c;表示启动顺序和依赖关系。[Service] 服务&#xff0c;表示…

LeetCode HOT 100 —— 23.合并K个升序链表

题目 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 思路 在做本题之前&#xff0c;先考虑一下&#xff0c;如何合并两个有序链表&#xff0c;见 21.合并两个有序链表 最直接的思路就是&am…

聊跨境:一年增长60%!人人都说跨境电商难做,但红利仍在(Starday)

随着经济全球化的发展&#xff0c;互联网的普及和跨境运输网络的日益发达&#xff0c;世界各国之间的贸易往来越来越频繁&#xff0c;跨境电商已然成为时代的主题。 近年来国家出口跨境电商利好政策的连续出台&#xff0c;加上《电商法》的保驾护航以及跨境电商从业者的积极推…

逻辑回归(logistic regression)

逻辑回归 一、假设函数 hθ(x)g(θTX)11e−θTX(Sigmoid函数)h_\theta(x) g(\theta^TX)\frac{1}{1e^{-\theta^TX}} \qquad \qquad \qquad (Sigmoid函数) hθ​(x)g(θTX)1e−θTX1​(Sigmoid函数) X取值范围是(−∞,∞)(-\infty, \infty)(−∞,∞) Y的取值范围是(0, 1) {θT…

基于FPGA的高速数据采集系统实现

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 2.1锁存器模块 2.2双口地址计数器模块 2.3双口RAM模块 2.4时钟分频模块 三、测试结果 一、理论基础 高速数据采集在军用民用领域都有着广泛的应用。高速数据采集系统在…

了解计算机里非门组成的部分

计算机中有一块硬件不是完全由NAND门构成的。这并不是把电脑变成电脑的必要条件&#xff0c;但大多数电脑都有一些。它们被用来从模拟的东西变成数字的东西&#xff0c;或者从数字变成模拟的东西。 人类的眼睛和耳朵会对类似的事物做出反应。我们听到的东西可以是响亮的&#x…