【Java】—— 集合框架:List接口常用方法与List接口的实现类

news2024/11/24 16:29:16

目录

4. Collection子接口1:List

4.1 List接口特点

4.2 List接口方法

4.3 List接口主要实现类:ArrayList

4.4 List的实现类之二:LinkedList

4.5 List的实现类之三:Vector

4.6 练习


4. Collection子接口1:List

4.1 List接口特点

  • 鉴于Java中数组用来存储数据的局限性,我们通常使用java.util.List替代数组

  • List集合类中元素有序、且重复,集合中的每个元素都有其对应的顺序索引

    • 举例:List集合存储数据,就像银行门口客服,给每一个来办理业务的客户分配序号:第一个来的是“张三”,客服给他分配的是0;第二个来的是“李四”,客服给他分配的1;以此类推,最后一个序号应该是“总人数-1”。

  • JDK API中List接口的实现类常用的有:ArrayListLinkedListVector

4.2 List接口方法

List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法。

  • 插入元素

    • void add(int index, Object ele):在index位置插入ele元素

    • boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来

  • 获取元素

    • Object get(int index):获取指定index位置的元素

    • List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合

  • 获取元素索引

    • int indexOf(Object obj):返回obj在集合中首次出现的位置

    • int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置

  • 删除和替换元素

    • Object remove(int index):移除指定index位置的元素,并返回此元素

    • Object set(int index, Object ele):设置指定index位置的元素为ele

举例:

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

public class TestListMethod {
    public static void main(String[] args) {
        // 创建List集合对象
        List<String> list = new ArrayList<String>();

        // 往 尾部添加 指定元素
        list.add("图图");
        list.add("小美");
        list.add("不高兴");

        System.out.println(list);
        // add(int index,String s) 往指定位置添加
        list.add(1,"没头脑");

        System.out.println(list);
        // String remove(int index) 删除指定位置元素  返回被删除元素
        // 删除索引位置为2的元素
        System.out.println("删除索引位置为2的元素");
        System.out.println(list.remove(2));

        System.out.println(list);

        // String set(int index,String s)
        // 在指定位置 进行 元素替代(改)
        // 修改指定位置元素
        list.set(0, "三毛");
        System.out.println(list);

        // String get(int index)  获取指定位置元素
        // 跟size() 方法一起用  来 遍历的
        for(int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        //还可以使用增强for
        for (String string : list) {
            System.out.println(string);
        }
    }
}

注意:在JavaSE中List名称的类型有两个,一个是java.util.List集合接口,一个是java.awt.List图形界面的组件,别导错包了。

4.3 List接口主要实现类:ArrayList

  • ArrayList 是 List 接口的主要实现类

  • 本质上,ArrayList是对象引用的一个”变长”数组

  • Arrays.asList(…) 方法返回的 List 集合,既不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合

4.4 List的实现类之二:LinkedList

  • 对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高。这是由底层采用链表(双向链表)结构存储数据决定的。

  • 特有方法:

    • void addFirst(Object obj)

    • void addLast(Object obj)

    • Object getFirst()

    • Object getLast()

    • Object removeFirst()

    • Object removeLast()

4.5 List的实现类之三:Vector

  • Vector 是一个古老的集合,JDK1.0就有了。大多数操作与ArrayList相同,区别之处在于Vector是线程安全的。

  • 在各种List中,最好把ArrayList作为默认选择。当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用。

  • 特有方法:

    • void addElement(Object obj)

    • void insertElementAt(Object obj,int index)

    • void setElementAt(Object obj,int index)

    • void removeElement(Object obj)

    • void removeAllElements()

4.6 练习

练习1:

  • 定义学生类,属性为姓名、年龄,提供必要的getter、setter方法,构造器,toString(),equals()方法。

  • 使用ArrayList集合,保存录入的多个学生对象。

  • 循环录入的方式,1:继续录入,0:结束录入。

  • 录入结束后,用foreach遍历集合。

  • 代码实现,效果如图所示:

Student.java

package exer1;

import java.util.Objects;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *      定义学生类,属性为姓名、年龄,提供必要的getter、setter方法,构造器,toString(),equals()方法
 * @Author zyjstart
 * @Create:2024/10/2 16:13
 */
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

/*    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }*/
}

StudentTest.java

package exer1;

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

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *
 * @Author zyjstart
 * @Create:2024/10/2 16:17
 */
public class StudentTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        ArrayList list = new ArrayList();

        System.out.println("请录入学生信息:");

        while (true){
            System.out.println("1:继续录入,0:结束录入");
            int selection = sc.nextInt();

            if (selection == 0){    //输入是0,退出循环
                break;
            }

            System.out.print("请输入学生的姓名:");
            String name = sc.next();
            System.out.print("请输入学生的年龄:");
            int age = sc.nextInt();
            // 将输入的姓名和年龄封装到对象里边
            Student s = new Student(name,age);
            // 将对象添加到集合里边
            list.add(s);

        }

        //遍历集合中的学生信息
        System.out.println("遍历学生信息:");
        for (Object s : list){
            System.out.println(s.toString());
        }

        sc.close();
    }
}

练习2:

1、请定义方法public static int listTest(Collection list,char s)统计集合中指定元素出现的次数

2、创建集合,集合存放随机生成的30个小写字母

3、用listTest统计,a、b、c、x元素的出现次数

4、效果如下

ListTest.java
package exer2;

import java.util.ArrayList;
import java.util.Collection;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *
 * @Author zyjstart
 * @Create:2024/10/2 19:19
 */
public class ListTest {
    public static void main(String[] args) {

        // 需求1:随机生成30个字符,存放在ArrayList中
        ArrayList list = new ArrayList();

        for (int i=0;i<30;i++){
            // 'a' - 'z'  [97,122]
            list.add((char)(Math.random() * 26 + 97));//使用Math类产生随机数,Random方法的范围为[0,1)
        }
        System.out.println(list);

        // 调用方法,将该字符出现的次数返回
        int aCount = listTest(list, 'a');
        int bCount = listTest(list, 'b');
        int cCount = listTest(list, 'c');
        int xCount = listTest(list, 'x');

        // 输出结果
        System.out.println("a:" + aCount);
        System.out.println("b:" + bCount);
        System.out.println("c:" + cCount);
        System.out.println("x:" + xCount);

    }

    // 需求2:遍历ArrayList,查找指定的元素出现的次数
    public static int listTest(Collection list,char s){
        int count = 0;  // 用于统计该字符出现的次数
        for (Object obj : list){
            if (s == (char)obj){
                count++;
            }
        }
        return count;
    }

}

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

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

相关文章

PCL 点云直通滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 直通滤波实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xf…

CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测

CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测 目录 CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现CS-BP多变量时间序列预测(布谷鸟搜索算法优化B…

VMware中Ubuntu系统Docker正常运行但网络不通(已解决)

问题描述&#xff1a;在VMware中的Ubuntu系统下部署了Docker&#xff0c;当在docker容器中运行Eureka微服务时&#xff0c;发现Eureka启动正常&#xff0c;但无法通过网页访问该容器中Eureka。 解决办法如下&#xff1a; 1、创建桥接网络&#xff1a;test-net sudo docker n…

媲美GPT-4o mini的小模型,Meta Llama 3.2模型全面解读!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

高性能架构—存储高性能

1 &#x1f4ca;关系型数据库 存储技术飞速发展&#xff0c;关系型数据的ACID特性以及强大的SQL查询让其成为各种业务系统的关键和核心存储系统。 很多场景下的高性能设计最核心的就是关系型数据库的设计&#xff0c;很多数据库厂商再优化和提升单个数据库服务器的性能方面做了…

网络原理-数据链路层

在这一层中和程序员距离比较遥远&#xff0c;除非是做交换机开发&#xff0c;否则不需要了解数据链路层 由AI可知&#xff1a; 数据链路层&#xff08;Data Link Layer&#xff09;是OSI&#xff08;Open Systems Interconnection&#xff09;七层网络模型中的第二层&#xff0…

【Android 14源码分析】Activity启动流程-3

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

后台管理系统脚手架

后台管理系统脚手架 介绍 在快速迭代的软件开发世界里&#xff0c;时间就是生产力&#xff0c;效率决定成败。对于构建复杂而庞大的后台系统而言&#xff0c;一个高效、可定制的后台脚手架&#xff08;Backend Scaffold&#xff09;无疑是开发者的得力助手。 脚手架 后台脚…

Python案例--这天第几天

如何使用Python计算一年中的第几天&#xff1a;详细指南 在处理日期和时间时&#xff0c;我们经常需要确定一个特定日期是一年中的第几天。这在许多应用场景中都非常有用&#xff0c;比如日历应用程序、数据分析和时间管理工具。Python&#xff0c;作为一种广泛使用的编程语言…

低功耗4G模组Air780E之串口通信篇

你对低功耗4G模组Air780E有多少了解&#xff1f; 今天我们来讲解低功耗4G模组Air780E的串口通信的基本用法&#xff0c;小伙伴们&#xff0c;学起来吧&#xff01; 一、硬件准备 780E开发板一套&#xff0c;包括天线、USB数据线。 USB转TTL工具或线&#xff08;例如ch340、…

用CSS创造三角形案例

6.3.2 用CSS创造三角形 用div来创建&#xff0c;角上是平分的&#xff0c;所以要是内部宽高为0&#xff0c;其他边透明&#xff0c;正好是三角形。 代码 div {border: 12px solid;width: 0;height: 0;border-color: transparent red transparent transparent; } 与伪元素aft…

基于SSM的校园社团管理系统的设计 社团信息管理 智慧社团管理社团预约系统 社团活动管理 社团人员管理 在线社团管理社团资源管理(源码+定制+文档)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【rCore OS 开源操作系统】Rust 字符串(可变字符串String与字符串切片str)

【rCore OS 开源操作系统】Rust 语法详解: Strings 前言 这次涉及到的题目相对来说比较有深度&#xff0c;涉及到 Rust 新手们容易困惑的点。 这一次在直接开始做题之前&#xff0c;先来学习下字符串相关的知识。 Rust 的字符串 Rust中“字符串”这个概念涉及多种类型&…

Pikachu-xss实验案例-钓鱼

攻击思路&#xff1a;提供一个与攻击网站相似的登陆的钓鱼页面&#xff1b;让用户输入登陆信息 查看项目源代码&#xff0c;首先访问 fish.php ,提供输入的登陆框&#xff0c; 从登陆框获取到账号、密码后&#xff0c;重定向到xfish.php 做保存&#xff1b; 因此&#xff0c;需…

遥感图像变换检测实践上手(TensorRT+UNet)

目录 简介 分析PyTorch示例 onnx模型转engine 编写TensorRT推理代码 main.cpp测试代码 小结 简介 这里通过TensorRTUNet&#xff0c;在Linux下实现对遥感图像的变化检测&#xff0c;示例如下&#xff1a; 可以先拉去代码&#xff1a;RemoteChangeDetection 分析PyTorch示…

C++基类构造器的自动调用

C基类构造器的自动调用 虽然基类的构造器和解构器不会被派生类继承&#xff0c;但它们会被派生类的构造器和解构器自动调用&#xff0c;今天我们用代码实证一下。 验证代码 源代码&#xff0c;仔细看注释内容&#xff1a; D:\YcjWork\CppTour>vim c2004.cpp #include &l…

特征工程与选择:优化模型性能的关键步骤----示例:特征工程在泰坦尼克号生存预测中的应用、使用递归特征消除(RFE)进行特征选择

特征工程和特征选择是机器学习流程中至关重要的环节&#xff0c;直接影响到模型的性能。特征工程涉及从原始数据中提取或构造有用的特征&#xff0c;而特征选择则是从已有的特征集中挑选出最相关的子集。 特征工程 特征工程是指创建能够使机器学习算法更好地理解数据的新特征的…

平面电磁波(解麦克斯韦方程)

注意无源代表你立方程那个点xyzt处没有源&#xff0c;电场磁场也是这个点的。 j电流面密度&#xff0c;电流除以单位面积&#xff0c;ρ电荷体密度&#xff0c;电荷除以单位体积。 j方程组有16个未知数&#xff0c;每个矢量有三个xyz分量&#xff0c;即三个未知数&#xff0c;…

样式重置 normalize.css

安装normalize.css npm install --save normalize.csspnpm add normalize.css安装less yarn add less -Dmain.ts import { createApp } from vue import App from ./App.vue // 引入 import normalize.csscreateApp(App).mount(#app)index.less import less中的语法 imp…

JDBC 概述

JDBC 概述 JDBC的基本概念与功能JDBC的工作原理JDBC的组件与类JDBC的类型与特性JDBC的应用场景 JDBC&#xff08;Java Database Connectivity&#xff09;即Java数据库连接&#xff0c;是Java编程语言用于与数据库进行连接和操作的API&#xff08;应用程序编程接口&#xff09;…