【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合

目录

List集合

1.1 概述

1.2 特点

1.3 常用方法

1.4 ArrayList集合

1.4.1 概述 

1.4.2 练习

1.5 LinkedList集合 

1.5.1 概述

1.5.2 特点

1.5.3 常用方法

1.5.4 练习

1.6 Vector类

1.6.1 概述

1.6.2 练习

1.7 List实现类的异同点


List集合

1.1 概述

        java.util.List:List是一个接口,它继承自Collection接口。常用的实现类有ArrayList和LinkedList。使用List接口的好处是可以将代码与具体的实现类解耦,从而提高代码的灵活性和可维护性。

1.2 特点

  1. 有序的集合,存储元素和取出元素的顺序是一致的(存储123,取出123)。
  2. 有索引,包含了一些带索引的方法 。
  3. 允许存储重复的元素 。

1.3 常用方法

        List接口继承Collection接口,因而Collection中常用的方法List也可使用。这里主要列举一些List个性化的方法(带索引方法的使用)。List接口不能直接创建对象,需要采用多态形式创建 其 实现类对象,才能使用。

方法:

  • void add(int index,E element):将E,添加到该集合中的index处。
  • E get(int index):返回集合中index的E。
  • E remove(int index):移除列表中index的E,返回的是被移除的E。
  • E set(int index,E element):用E替换集合中index的E,返回值是更新前的E。
  • int indexOf(E element):返回集合中E的index,没有找到返回-1。

        

说明:

        E:集合元素,集合中具体的值。

        index:指定位置,集合的索引值。

        

注意事项:操作索引的时候,一定要防止索引越界异常:

  • IndexOutOfBoundsException:索引越界异常,集合会报。
  • ArrayIndexOutOfBoundsException:数组索引越界异常。
  • StringIndexOutOfBoundsException:字符串索引越界异常。

1.4 ArrayList集合

1.4.1 概述 

        java.util.ArrayList:ArrayList是一种动态数组,它实现了List接口。ArrayList可以根据需要自动调整大小,可以存储任意类型的对象。ArrayList提供了一系列的方法,可以方便地对其中的元素进行添加、删除、查找和遍历操作。与普通的数组相比,ArrayList的大小是可变的,并且可以自动处理底层数组的扩容和缩容。使用ArrayList能够方便地操作和管理一系列对象的集合。

1.4.2 练习

源代码: 

package com.zhy.coll;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class TestArrayList {public static void main(String[] args) {//创建一个集合<泛型为String类型>,多态写法,接口引用 指向 实现类对象List<String> list = new ArrayList<String>();//往集合中添加元素list.add("elememt1");list.add("elememt2");list.add("elememt3");//打印集合System.out.println("初始化集合:" + list);//1.将指定元素,添加到该集合的指定位置上list.add(1,"elementNew");System.out.println("在索引1插入元素:" + list);//2.返回集合中指定位置的元素String nameE = list.get(0);System.out.println("返回索引0的元素:" + nameE);//3.移除集合中指定位置的元素,返回的是被移除的元素String removeE = list.remove(2);System.out.println("移除索引2的元素,返回的是被移除的元素:" + removeE);//4.用指定元素替换集合中指定位置的元素,返回的是更新前的元素String beforeE = list.set(0,"elementUpdate");System.out.println("用新元素替换掉索引0的元素,返回的是更新前索引0的元素:" + beforeE);//5.返回集合中指定元素的索引,找不到返回-1int indexE = list.indexOf("elementOld");System.out.println("返回(elementOld)的索引:" + indexE);//使用迭代器遍历List集合System.out.print("使用迭代器遍历List集合:");Iterator<String> iterator = list.iterator();while(iterator.hasNext()){String tempE = iterator.next();System.out.print(tempE + " ");}}
}

输出结果:

1.5 LinkedList集合 

1.5.1 概述

        java.util.LinkedList:LinkedList实现了Java的List接口,因而可以像其他List实现类一样使用。它也实现了Deque接口,因而可以作为双端队列使用。另外,LinkedList还实现了Queue接口,因而可以作为队列使用。

1.5.2 特点

  • LinkedList是Java中的一种数据结构,它是一个双向链表,每个节点包含了数据本身以及指向前一个节点和后一个节点的引用
  • LinkedList不需要预先指定容量,可以根据需要动态地增加或减少元素。
  • LinkedList允许快速插入和删除元素,因为只需要调整节点的引用,而不需要像数组那样移动元素。
  • 访问和搜索元素的性能较差,因为需要从头或尾开始遍历链表。

1.5.3 常用方法

        使用LinkedList集合特有的方法,不能使用多态。

  • void addFirst(E e):将指定元素插入此列表的开头。
  • void addLast(E e):将指定元素添加到此列表的结尾。
  • void push(E e):将元素推入此列表所表示的堆栈。
  • E getFirst():返回此列表的第一个元素。
  • E getLast():返回此列表的最后一个元素。
  • E removeFirst():移除并返回此列表的第一个元素。
  • E removeLast():移除并返回此列表的最后一个元素。
  • E pop():从此列表所表示的堆栈出弹出一个元素。

1.5.4 练习

源代码:

package com.zhy.coll;import java.util.LinkedList;public class TestLinkedList {public static void main(String[] args) {//创建LinkedList对象LinkedList<String> linkedList = new LinkedList<>();linkedList.add("Annie");linkedList.add("Bob");linkedList.add("Tom");System.out.println("初始化LinkedList集合:" + linkedList);//返回此列表的第一个元素String fistE = linkedList.getFirst();System.out.println("列表的第一个元素为:" + fistE);//返回此列表的最后一个元素String lastE = linkedList.getLast();System.out.println("列表的最后一个元素为:" + lastE);//将指定元素插入此列表的开头linkedList.addFirst("Lisa");System.out.println("在列表开头插入元素:" + linkedList);//将指定元素添加到此列表的结尾linkedList.addLast("Carl");System.out.println("在列表末尾插入元素:" + linkedList);//移除并返回此列表的第一个元素linkedList.removeFirst();System.out.println("移除第一个元素:" + linkedList);//移除并返回此列表的最后一个元素linkedList.removeLast();System.out.println("移除最后一个元素:" + linkedList);//将元素推入此列表所表示的堆栈linkedList.push("Dick");System.out.println("在栈首添加元素:" + linkedList);//从列表所表示的堆栈出弹出一个元素linkedList.pop();System.out.println("将栈首的元素弹出:" + linkedList);//使用增强for遍历列表System.out.print("使用增强for遍历列表:");for(String e : linkedList){System.out.print(e + " ");}}
}

输出结果:

1.6 Vector类

1.6.1 概述

        Vector类是Java中提供的一种动态数组实现。它是使用数组来存储元素的,并且可以根据需要自动调整数组的大小。Vector类提供了一系列方法来操作数组,例如添加元素、获取元素、删除元素等。Vector类还具有线程安全的特性,可以在多个线程同时访问和修改数组,以确保数据的一致性和安全性。因此,Vector类常用于需要在多线程环境下操作数组的场景中

1.6.2 练习

源代码:

package com.zhy.coll;import java.util.Iterator;
import java.util.Vector;public class TestVector {public static void main(String[] args) {Vector<String> vector = new Vector<>();vector.add("element1");vector.add("element2");vector.add("element3");System.out.println("初始化集合:" + vector);vector.remove(0);System.out.println("移除第0个元素:" + vector);vector.set(0,"elementNew");System.out.println("修改第0个元素的值:" + vector);System.out.print("使用增强for遍历集合:");for (String name : vector){System.out.print(name + " ");}System.out.print("\n使用迭代器遍历集合:");Iterator<String> iterator = vector.iterator();while(iterator.hasNext()){String ele = iterator.next();System.out.print(ele + " ");}}
}

输出结果: 

1.7 List实现类的异同点

        ArrayList,LinkedList和Vector都是Java集合框架中的实现类,它们用于存储和操作集合数据。三者的异同如下:

相同点:

  • 都实现了List接口,都支持索引访问元素。
  • 都可以存储任意类型的对象。
  • 都具有动态扩容的能力。

不同点: 

  • ArrayList底层使用数组实现;LinkedList底层使用双向链表实现;Vector底层也使用数组实现。
  • ArrayList是非线程安全的;LinkedList和Vector是线程安全的。
  • ArrayList和LinkedList适用于随机访问和遍历;而Vector适用于需要线程安全性的场景。
  • ArrayList和LinkedList的插入和删除操作的性能取决于位置;ArrayList在尾部插入和删除元素效率高,而LinkedList在中间插入和删除元素效率高。
  • Vector相比ArrayList和LinkedList,性能较低,因为它需要进行同步(线程安全)操作。

        因此,选择ArrayList还是LinkedList或Vector取决于具体的需求。如果需要随机访问和遍历,且不需要线程安全,则选择ArrayList;如果需要频繁插入和删除元素,或需要线程安全,则选择LinkedList;如果需要线程安全且不考虑性能,则选择Vector

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

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

相关文章

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第三天-Bootloader编写(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1KE2cq_kHaRW5HsP29hgL6w?pwd1688 提取码&#xff1a;1688 链接脚本 0. Contents 1. 概论 2. 基本概念 3. 脚本格式 4. 简单例子 5. 简单脚本命令 6. 对符号的赋值 7. SECTIONS命令 8. MEMORY命令 9. PHDRS命令 10. VERS…

函数式接口

文章目录 函数式接口函数式接口当做方法的参数函数式接口作为返回值生产者接口 - Supplier消费者接口 - Consumer使用方式&#xff1a;案例&#xff1a;字符串拆分 判断接口 - Predicate使用方式应用场景 加工接口 - Function 函数式接口 只有一个抽象方法的接口&#xff0c;转…

多旋翼无人机调试问题分析

一、电机和螺旋桨检查 在多旋翼无人机的调试过程中&#xff0c;首先需要检查电机和螺旋桨的状态。电机应转动灵活&#xff0c;无卡滞现象&#xff0c;且无明显磨损。螺旋桨应安装牢固&#xff0c;无松动现象&#xff0c;且桨叶完好无损。若发现问题&#xff0c;应及时更换或维…

(菜鸟自学)漏洞利用——MS11-080

&#xff08;菜鸟自学&#xff09;漏洞利用——MS11-080 漏洞简介利用漏洞对系统进行提权查看漏洞利用代码和工具将py脚本转换为exe程序渗透攻击验证 漏洞简介 MS11-080 是指微软于 2011 年发布的一个安全公告&#xff08;MS11-080&#xff09;&#xff0c;其中包含了关于 Win…

自动化网络故障管理

故障管理是网络管理的组成部分&#xff0c;涉及检测、隔离和解决问题&#xff0c;如果实施得当&#xff0c;网络故障管理可以使连接、应用程序和服务保持在最佳水平&#xff0c;提供容错能力并最大限度地减少停机时间&#xff0c;专门为此目的设计的平台或工具称为故障管理系统…

【并发编程】顺序控制交替输出abc

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程⛺️稳重求进&#xff0c;晒太阳 必须先2后1打印 用synchronized package aaa;public class Test2 {static Boolean hasExecutorfalse;public static void main(String[] args) …

1 - 搭建Redis数据库服务器|LNP+Redis

搭建Redis数据库服务器&#xff5c;LNPRedis 搭建Redis数据库服务器相关概念Redis介绍安装RedisRedis服务常用管理命令命令set 、 mset 、 get 、 mget命令keys 、 type 、 exists 、 del命令ttl 、 expire 、 move 、 flushdb 、flushall 、save、shutdown 配置文件解析 LNP …

Wordpress seo优化该怎么做?

Wordpress作为开源管理系统&#xff0c;目前已然是世界上最流行的cms之一&#xff0c;这不仅仅因为他开源&#xff0c;对用户友好&#xff0c;让任何人都能轻而易举的制作网站&#xff0c;更是因为这套程序对于搜索引擎非常友好&#xff0c;是做谷歌seo的不二之选 Wordpress作为…

【Ubuntu】systemctl 命令

systemctl 是一个用于检视和控制 systemd 系统和服务管理器的命令行工具。systemd 是用于启动、停止和管理 Linux 系统中的服务的守护进程。以下是一些常用的 systemctl 命令及其说明&#xff1a; systemctl start <unit>: 启动指定的服务单元 systemctl start sshd sy…

【腾讯云服务器】幻兽帕鲁私服服务器部署保姆级教程

在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活&#xff0c;也可以为你在工厂工作。你也可以将它们进行售卖&#xff0c;或分解后食用。 想要部署属于自…

Java入门篇:打造你的Java开发环境——从零开始配置IDEA与Eclipse

引言 “工欲善其事&#xff0c;必先利其器” 作为每一位Java初学者的必经之路&#xff0c;搭建合适的开发环境是至关重要的第一步。本篇将详细指导你如何安装并配置两大主流Java开发工具——IntelliJ IDEA和Eclipse&#xff0c;助你在编程之旅上迈出坚实的第一步。 一、Java开发…

微信小程序分页加载功能,结合后端实现上拉底部加载下一页数据,数据加载中和暂无数据提示

&#x1f935; 作者&#xff1a;coderYYY &#x1f9d1; 个人简介&#xff1a;前端程序媛&#xff0c;目前主攻web前端&#xff0c;后端辅助&#xff0c;其他技术知识也会偶尔分享&#x1f340;欢迎和我一起交流&#xff01;&#x1f680;&#xff08;评论和私信一般会回&#…

【服务器Midjourney】Midjourney网站0基础搭建

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

深入理解Flutter中的GlobalKey与LocalKey(ValueKey、ObjectKey、UniqueKey)及其使用方法

在Flutter中&#xff0c;Key是一个非常重要的概念&#xff0c;它用于标识和管理Widget。GlobalKey和LocalKey是Key的两个主要子类&#xff0c;而ValueKey、ObjectKey和UniqueKey则是LocalKey的具体实现。在本文中&#xff0c;我们将深入介绍这些关键概念以及它们在Flutter中的使…

XR虚拟拍摄技术:开启短剧与微剧的全新篇章

随着科技的快速发展&#xff0c;XR虚拟拍摄技术已经成为短剧与微剧制作的重要工具。这种技术为影视制作带来了巨大的变革&#xff0c;为观众带来了更加丰富、逼真的视听体验。 XR虚拟拍摄技术通过构建虚拟场景&#xff0c;使得制作人员能够更加自由地发挥创意和想象力。这种技术…

android:excludeFromRecents

android:excludeFromRecents 基础从根上影响 TaskexcludeFromRecents 属性可能会影响系统 基础 android:excludeFromRecents是一种在Android应用程序清单文件&#xff08;AndroidManifest.xml&#xff09;中使用的属性&#xff0c;用于指定一个Activity是否应该在最近任务列表…

两数之和[中等]

一、题目 给你一个下标从1开始的整数数组numbers&#xff0c;该数组已按非递减顺序排列&#xff0c;请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]和numbers[index2]&#xff0c;则1 < index1 < index2 < numbers.len…

MySQL修炼手册17:高级查询优化:深入理解执行计划

目录 写在开头1 执行计划的基本概念1.1 SQL查询解析1.1.1 语法分析1.1.2 语义分析1.1.3 内部数据结构的生成1.2 优化执行计划1.2.1 统计信息的利用1.2.2 索引选择1.2.3 连接算法1.2.4 子查询优化1.3 执行计划的评估1.3.1 统计信息的利用1.3.2 索引选择1.3.3 连接算法1.3.4 子查…

关于视觉3d目标检测学习像素深度的一点理解

在真实世界的一个物体&#xff0c;可以通过相机矩阵将其投影到像素坐标系上 但是&#xff0c;在像素坐标系上的像素&#xff0c;由于相机的原理&#xff0c;导致它的深度信息已经没有了&#xff0c;所以原理上是没法得到其真实深度的(即3d位置) 那么现在的深度学习方法又为什…

【AI】深度学习与图像描述生成——看图说话(1)

还记得我闲来无事&#xff0c;用大模型来“洗图”吗&#xff0c;就是想抄袭别人的图&#xff0c;但是又要装作原创的样子。因为洗稿大家都熟悉&#xff0c;洗图其实也是一样的。 【AIGC】今天想用AI“洗个图”&#xff0c;失败了&#xff0c;进来看我怎么做的-CSDN博客 【AIG…