Java——List接口

news2024/12/29 9:21:38

1.Java单列集合类(Collection)概述

Java中的集合类就像一个容器,专门用来存储Java类的对象。

数组可以用来保存对个对象,但有时无法事先确定需要保存对象的个数,此时数组便不再使用,因为数组的长度不可变。

为了在程序中保存数目不确定的对象,JDK中提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变————集合类

Collection:单列集合类的根接口
{1.List——元素有序(元素的存入顺序与取出顺序一致)、可重复
2.Set———元素无序、不可重复
}

1.1 Collection接口的方法(可用于 List 和 Set)

方法声明

  • boolean add(Object o) 向集合中添加一个元素
  • boolean addAll(Collection c) 将指定Collection 中的 所有元素 添加到该集合中-
  • void clear() 删除该集合中的所有元素
  • boolean remove(Object o) 删除该集合中的指定元素
  • boolean removeAll(Collection c) 删除指定集合中的所有元素
  • boolean isEmpty()
  • boolean.contains(Object o) 判断该集合中是否包含某个元素
  • boolean containsAll(Collection c) 判断该集合中是否包含指定集合中的所有元素
    I- terator iterator() 返回在该集合的元素上进行迭代的迭代器(iterator)
    用于遍历该集合所有元素
  • int size() 获取该集合元素个数

在这里插入图片描述

2.List接口

2.1 List接口简介

List接口继承自Collection接口,习惯性地将实现了List接口的对象称为List集合。

List集合中允许出现重复的元素,所有元素是以一种 线性方式 进行存储,可以通过索引来访问集合中的指定元素。

List集合元素有序————元素的存入顺序与取出顺序一致。

2.2 List 集合常用方法表

  • void add(int index,Object element)
    将元素 element插入在List 集合的index处

  • boolean addAll(int index,Collection c)
    将集合c所包含的所有元素插入到 List 集合的index处

  • Object get(int index)
    返回集合索引index处的元素

  • Object remove(int index)
    删除index 索引处的元素

  • Object set(int index, Object element)
    将索引 index 处元素替换成 element 对象,并将替换后的元素返回

  • int indexOf(Object o)
    返回对象o在List 集合中出现的位置索引

  • int lastlndexOf(Object o)
    返回对象o在List集合中最后一次出现的位置索引

  • List subList(int fromlndex, int tolndex)
    返回从索引fromindex(包括)到 tolndex(不包括)处所有元素集合组成的子集合
    在这里插入图片描述

2.3 ArrayList集合

ArrayList是List接口的一个实现类,它是程序中最常见的集合。

在ArrayList内部封装了一个 长度可变的 数组对象,但存入元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储。

由于ArrayList底层是使用数组保存元素,增删指定位置元素会导致创建新的数组,效率较低,因此不适合做大量的增删操作。

但这种数据结构允许程序通过索引的方式来访问元素,因此使用ArrayList集合查找元素很便捷。
在这里插入图片描述

2.4 LinkedList集合

为了克服ArrayList集合增删元素效率低的问题,LinkedList类在内部维护了一个双向循环链表

链表中的每一个元素都是用引用的方式来记住前一个与后一个元素,增删只需要修改这种引用关系即可。

LinkedList中定义的方法:

  • void add(int index, E element) 在此列表中指定的位置插入指定的元素
  • void addFirst(Object o) 将指定元素插入此列表的开头
  • void addLast(Object o) 将指定元素插入此列表的结尾
  • Object getFirst() 返回此列表的第一个元素
  • Object getLast() 返回此列表的最后一个元素
  • Object removeFirst() 移除并返回此列表的第一个元素
  • Object removeLast() 移除并返回此列表的最后个元素
  • 在这里插入图片描述
    在这里插入图片描述

2.5 ArrayList与LinkedList对比

  • 1.ArrayList 类似于 数据结构中的顺序表,顺序存储,查询容易,增删麻烦,不适合做大量的增删操作,查询迅速(下标索引)。

  • 2.LinkedList 类似于 数据结构中的双向循环链表,增删非常容易,不需要移动大量元素。

2.6 Iterator接口(迭代器)

主要用于迭代访问Collection中的元素。
在这里插入图片描述
在这里插入图片描述

3.List接口练习

任务描述:简易KTV点歌系统
分别使用LinkedList和ArrayList集合,实现编写一个模拟KTV点歌系统的程序
功能要求: 指令0代表添加歌曲 1代表置顶某歌曲 2代表将歌曲前移一位 3代表删除歌曲 4代表退出点歌系统

3.1 ArrayList实现

package com.yushifu.collection.list;

import java.util.ArrayList;
import java.util.Scanner;

//任务描述:简易KTV点歌系统
//      分别使用LinkedList和ArrayList集合,实现编写一个模拟KTV点歌系统的程序
//      功能要求: 指令0代表添加歌曲  1代表置顶某歌曲 2代表将歌曲前移一位 3代表删除歌曲 4代表退出点歌系统
public class ArrayListDemo02 {
    public static void main(String[] args) {
        //创建歌曲列表
        ArrayList list = new ArrayList();
        System.out.println("欢迎使用本KTV点歌系统!请按照以下指令操作:");
        System.out.println("0——添加歌曲");
        System.out.println("1——置顶歌曲");
        System.out.println("2——前移歌曲");
        System.out.println("3——删除歌曲");
        System.out.println("4——退出点歌系统");
        //初始化歌单
        firstAddSong(list);
        while (true){
            System.out.println("请输入指令:");
            //接收键盘输入的指令
            Scanner scanner = new Scanner(System.in);
            int command = scanner.nextInt();
            //执行对应序号的功能
            switch (command){
                case 0:
                    addSong(list);//添加歌曲
                    break;
                case 1:
                    setTop(list);//置顶歌曲
                    break;
                case 2:
                    moveSong(list);//前移歌曲
                    break;
                case 3:
                    deleteSong(list);//删除歌曲
                    break;
                case 4:             //退出系统
                    exit();
                    break;
                default:
                    System.out.println("您输入的指令有误,请按照指示重新输入!");
                    break;
            }
        }

    }
    //初始添加歌曲到歌单中
    public static void firstAddSong(ArrayList list){
        list.add("New Boy");
        list.add("Yellow");
        list.add("西湖");
        list.add("挪威的森林");
        list.add("我记得");
        list.add("半岛铁盒");
        System.out.println("初始歌单列表为:"+list);
    }
    //添加歌曲
    public static void addSong(ArrayList  list){
        System.out.println("请输入需要添加的歌名,按Enter键结束输入。");
        //保存从键盘输入的歌曲名
        String name = new Scanner(System.in).nextLine();
        list.add(name);//添加到当前歌单的末尾
        System.out.println("已添加歌曲:"+name);
        System.out.println("当前歌单列表为:"+list);
    }
    //删除歌曲
    public static void deleteSong(ArrayList list){
        System.out.println("请输入需要删除的歌名,按Enter键结束输入。");
        String name = new Scanner(System.in).nextLine();
        int location = list.indexOf(name);//indexOf(Object j)方法可以返回查找元素的位置
        if (location<0){//判断歌曲是否存在,因为ArrayList集合的下标为0,1,2,3.....
            System.out.println("歌单中不存在您要删除的歌曲!");
        }else {
            list.remove(name);
            System.out.println("删除成功!");
            System.out.println("当前歌单列表为:"+list);
        }
    }
    //前移歌曲
    public static void moveSong(ArrayList list){
        System.out.println("请输入您要前移一位得歌曲名称,按Enter键结束输入。");
        String name = new Scanner(System.in).nextLine();
        int location = list.indexOf(name);//获取所需操作歌曲的下标
        if (location<0){//判断是否存在用户输入的歌曲
            System.out.println("未找到您需要前移的歌曲");
        }else if (location == 0){
            System.out.println("您的歌曲已在第一位,无法前移。");
        }else {
            list.remove(name);//先将原来歌单中的删除,再插入到想要的位置
            list.add(location-1,name);
        }
        System.out.println("当前歌单列表为:"+list);
    }
    //将歌曲置顶
    public static void setTop(ArrayList list){
        System.out.println("请输入您需要置顶的歌曲名称,按Enter键结束输入。");
        String name = new Scanner(System.in).nextLine();
        int location = list.indexOf(name);//获取所需操作歌曲的下标
        if (location<0){//判断歌单中是否存在用户输入的歌曲
            System.out.println("并未找到您的歌曲!");
        } else if (location==0) {
            System.out.println("您的歌曲已置顶!");
        }else {
            list.remove(name);//先将原来歌单中的删除,再插入到想要的位置
            list.add(0,name);
        }
        System.out.println("当前歌单为:"+list);
    }
    public static void exit(){
        System.out.println("您已退出程序!");
        System.exit(0);//终止当前虚拟机
    }
}

在这里插入图片描述

3.2 LinkedList实现

package com.yushifu.collection.list;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;

//任务描述:简易KTV点歌系统
//      分别使用LinkedList和ArrayList集合,实现编写一个模拟KTV点歌系统的程序
//      功能要求: 指令0代表添加歌曲  1代表置顶某歌曲 2代表将歌曲前移一位 3代表删除歌曲 4代表退出点歌系统
public class LinkedListDemo02 {
    public static void main(String[] args) {
        //创建歌曲列表
        LinkedList list = new LinkedList();
        System.out.println("欢迎使用本KTV点歌系统!请按照以下指令操作:");
        System.out.println("0——添加歌曲");
        System.out.println("1——置顶歌曲");
        System.out.println("2——前移歌曲");
        System.out.println("3——删除歌曲");
        System.out.println("4——退出点歌系统");
        //初始化歌单
        firstAddSong(list);
        while (true){
            System.out.println("请输入指令:");
            //接收键盘输入的指令
            Scanner scanner = new Scanner(System.in);
            int command = scanner.nextInt();
            //执行对应序号的功能
            switch (command){
                case 0:
                    addSong(list);//添加歌曲
                    break;
                case 1:
                    setTop(list);//置顶歌曲
                    break;
                case 2:
                    moveSong(list);//前移歌曲
                    break;
                case 3:
                    deleteSong(list);//删除歌曲
                    break;
                case 4:             //退出系统
                    exit();
                    break;
                default:
                    System.out.println("您输入的指令有误,请按照指示重新输入!");
                    break;
            }
        }

    }
    //初始添加歌曲到歌单中
    public static void firstAddSong(LinkedList list){
        list.add("New Boy");
        list.add("Yellow");
        list.add("西湖");
        list.add("挪威的森林");
        list.add("我记得");
        list.add("半岛铁盒");
        System.out.println("初始歌单列表为:"+list);
    }
    //添加歌曲
    public static void addSong(LinkedList  list){
        System.out.println("请输入需要添加的歌名,按Enter键结束输入。");
        //保存从键盘输入的歌曲名
        String name = new Scanner(System.in).nextLine();
        list.addLast(name);//添加到当前歌单的末尾
        System.out.println("已添加歌曲:"+name);
        System.out.println("当前歌单列表为:"+list);
    }
    //删除歌曲
    public static void deleteSong(LinkedList list){
        System.out.println("请输入需要删除的歌名,按Enter键结束输入。");
        String name = new Scanner(System.in).nextLine();
        int location = list.indexOf(name);//indexOf(Object j)方法可以返回查找元素的位置
        if (location<0){//判断歌曲是否存在,因为ArrayList集合的下标为0,1,2,3.....
            System.out.println("歌单中不存在您要删除的歌曲!");
        }else {
            list.remove(name);
            System.out.println("删除成功!");
            System.out.println("当前歌单列表为:"+list);
        }
    }
    //前移歌曲
    public static void moveSong(LinkedList list){
        System.out.println("请输入您要前移一位得歌曲名称,按Enter键结束输入。");
        String name = new Scanner(System.in).nextLine();
        int location = list.indexOf(name);//获取所需操作歌曲的下标
        if (location<0){//判断是否存在用户输入的歌曲
            System.out.println("未找到您需要前移的歌曲");
        }else if (location == 0){
            System.out.println("您的歌曲已在第一位,无法前移。");
        }else {
            list.remove(name);
            list.add(location-1,name);
        }
        System.out.println("当前歌单列表为:"+list);
    }
    //将歌曲置顶
    public static void setTop(LinkedList list){
        System.out.println("请输入您需要置顶的歌曲名称,按Enter键结束输入。");
        String name = new Scanner(System.in).nextLine();
        int location = list.indexOf(name);//获取所需操作歌曲的下标
        if (location<0){//判断歌单中是否存在用户输入的歌曲
            System.out.println("并未找到您的歌曲!");
        } else if (location==0) {
            System.out.println("您的歌曲已置顶!");
        }else {
            list.remove(name);
            list.addFirst(name);
        }
        System.out.println("当前歌单为:"+list);
    }
    public static void exit(){
        System.out.println("您已退出程序!");
        System.exit(0);//终止当前虚拟机
    }
}

在这里插入图片描述

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

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

相关文章

小黑怀柔证书下来,腿部酸痛也得到了缓解,跟跑团里的毛毛一起遛龙潭中湖公园,过两天要走闭幕式的leetode之旅的leetcode之旅:18. 四数之和

小黑代码(小黑独立做出来) class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:# 数组长度n len(nums)if n < 4:return []# 排序nums.sort()def three_sum(target_, start, end):if end - start < 2:return []# 结果数组res []fo…

如何申请免费的DV SSL证书

SSL&#xff08;Secure Sockets Layer&#xff09;证书是保护网站和用户数据安全的重要组成部分。DV&#xff08;Domain Validation&#xff09; SSL证书是最简单的一种&#xff0c;通常用于验证域名的拥有权。虽然市面上有许多商业SSL证书&#xff0c;但您也可以轻松获得免费的…

IP地址为什么需要SSL证书

随着互联网的发展&#xff0c;越来越多的企业和个人开始使用IP地址进行网站访问。然而&#xff0c;明文传输的IP地址很容易被黑客截取&#xff0c;从而导致数据泄露和网络安全问题。因此&#xff0c;为了保护IP地址的数据传输安全&#xff0c;企业需要使用IP地址证书。 点击申请…

OCPP1.6协议

目录 导言 功能简介 本地授权列表 类型 IdToken IdTagInfo 授权状态 ChargePointErrorCode CiString50Type 充电桩状态-ChargePointStatus 协议指令 1、授权-Authorize 1.1 说明 1.2 Authorize.req 1.3 Authorize.conf 1.4 JSON格式 1.5 代码 2、启动通知-B…

华为OD机试 - 热点网站统计 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

【C++】缺省参数与函数重载

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 前言 本篇文章博主将带你学习缺省参数与函数重载&…

京东API接口带你了解京东工业|电商及供应链服务

京东工业赴港上市&#xff0c;带着非常优秀的成绩。 招股书显示&#xff0c;2022年实现交易额223亿元&#xff0c;营收141亿元&#xff0c;调整后净利润7亿元。短短六年时间&#xff0c;已成为中国工业供应链技术与服务市场领导者。京东API接口接入调取京东商品详情&#xff0c…

零基础怎么样才能学好 Python?Python 入门必看

Python 目前可以用一个字来描述那就是 “火”&#xff0c;问题来了&#xff0c;这么火的语言零基础小白到底该怎样学习 Python&#xff1f; 首先&#xff0c;从基础开始学习&#xff0c;切勿毛躁。 刚开始学习 Python 的时候&#xff0c;我们可能会有些毛躁总觉得这些知识太简…

南美委内瑞拉市场最全分析开发攻略,收藏一篇就够了

委内瑞拉是一个常被国内跨境商家忽略但具有巨大潜力的市场。尽管委内瑞拉的网络基础建设水平较低&#xff0c;网络速度受限&#xff0c;但委内瑞拉网络渗透率较佳。因为长期受美国制裁&#xff0c;所以经济发展水平较低&#xff0c;很多产品依赖进口&#xff0c;市场潜力还是非…

睿趣科技:抖音短视频带货素材哪里找

随着抖音短视频的火爆&#xff0c;越来越多的商家开始利用抖音进行产品推广和销售。而制作一部成功的抖音短视频&#xff0c;除了需要有吸引人的内容和创意外&#xff0c;还需要有高质量的素材。那么&#xff0c;抖音短视频带货素材应该去哪里找呢? 首先&#xff0c;我们可以从…

将excel表中的英文自动翻译成中文

某乎上垃圾内容太多&#xff0c;要么是复制粘贴的youdao翻译&#xff0c;要么是某网络函数库的软广。这里提供office的原生方法&#xff0c;需要用到word&#xff08;不适合数据量太大的情况&#xff09; 方法 复制需要翻译的列到word选择审阅 -> 翻译 -> 翻译文档 -&g…

掌控安全Update.jsp SQL注入

0x01 漏洞介绍 亿赛通电子文档安全管理系统是国内最早基于文件过滤驱动技术的文档加解密产品之一&#xff0c;保护范围涵盖终端电脑&#xff08;Windows、Mac、Linux系统平台&#xff09;、智能终端&#xff08;Android、IOS&#xff09;及各类应用系统&#xff08;OA、知识管理…

【精华系列】跟着Token学习数据挖掘-1

Hello&#xff0c;大家好&#xff01;这里是Token的博客&#xff0c;欢迎您的到来 今天整理的笔记时数据挖掘方向的基础入门&#xff0c;了解数据分析使用的一些基础的Python库&#xff0c;为后面的数据处理做好准备 01-数据分析工具介绍 准备&#xff1a;Python的安装、平台搭…

PTE-精听学习(一)

目录 SST SST每一题都是单独计时 MMA 切换题目的时候&#xff0c;总是会迷茫 deduct 出现关键词之后&#xff0c;才开始精听 没有人管你 &#xff0c;绝对是要为后方留出更多的时间 &#xff0c;选多一个错的&#xff0c;要倒扣分 特征 1.paraphrase 2.循序出现 …

MySQLJDBC入门与SQL注入

MySQL-JDBC入门与SQL注入 一.JDBC概述 1.JDBC 在Java语言中提供对数据库访问的支持Sun公司于1996年提供了一套访问数据库的标准Java类库JDBCJDBC的全称是Java数据库连接(Java Database Connectivity)它是一套用于执行 SQL语句的Java API应用程序可通过这套API连接到关系数据…

Python中的List

一、List(列表) 1、什么是 List (列表) List (列表)是 Python 内置的一种数据类型。 它是一种有序的集合,可以随时添加和删除其中的元素。 那为什么要有 List (列表)呢? 我们用一个例子来说明。 现在有一个团队要出去玩,要先报名。如果用我们之前学过的知识,那…

太强了!三种方案优化 2000w 数据大表!

目录 评估表数据体量 表容量&#xff1a; 磁盘空间 实例容量 出现问题的原因 如何解决单表数据量太大&#xff0c;查询变慢的问题 方案一&#xff1a;数据表分区 方案二&#xff1a;数据库分表 水平分表 垂直分表 1.取模方案&#xff1a; 2.range 范围方案 3.hash…

儿童口腔卫生:建立健康微笑的基石

引言 儿童口腔卫生是维护健康的关键部分&#xff0c;它不仅影响口腔健康&#xff0c;还对全身健康产生必然影响。本文将探讨一些儿童口腔卫生的重要性以及儿童的关键注意事项&#xff0c;以帮助家长和监护人确保儿童拥有健康的口腔。 第一部分&#xff1a;儿童口腔卫生的重要性…

Hudi第四章:集成Hive

系列文章目录 Hudi第一章&#xff1a;编译安装 Hudi第二章&#xff1a;集成Spark Hudi第二章&#xff1a;集成Spark(二) Hudi第三章&#xff1a;集成Flink Hudi第四章&#xff1a;集成Hive 文章目录 系列文章目录前言一、环境准备1.拷贝jar包 二、Flink集成hive1.配置模版2.案…

优雅而高效的JavaScript——Proxy 和 Reflect

&#x1f914;博主&#xff1a;小猫娃来啦 文章核心&#xff1a;优雅而高效的JavaScript——Proxy 和 Reflect 文章目录 Proxy 和 Reflect是什么Proxy创建 Proxy 对象拦截器方法拦截器示例&#xff1a;属性拦截拦截器示例&#xff1a;方法拦截 ReflectReflect 的静态方法Reflec…