【自学笔记】01Java基础-08Java常用API:String、ArrayList集合

news2024/11/27 18:44:18

记录学习Java基础中有关应用程序接口(API)的基础知识,包括两个常用类String和ArrayList类的介绍。

什么是API?

API是Application Programming Interface(应用程序编程接口)的缩写,它是一组预先定义的规则和规范,用于定义软件系统如何交互、通信或调用彼此的功能
简单理解API就是封装好可直接调用的方法。

1 String类详解

1.1 String类概述

在这里插入图片描述
在这里插入图片描述

1.2 String类常用方法-创建字符串对象的两种方式

  1. 第一种,直接使用" "定义:

String s = “字符内容”;

  1. 第二种,我们已经知道String是Java封装的一个类,可以调用几个构造方法来创建String对象
    在这里插入图片描述
    不同方式声明String的区别?
    在这里插入图片描述
    在这里插入图片描述
    由于s1指向的是常量池中的"abc",而s2指向的是堆内存中新建的"abc"对象,所以它们指向不同的内存区域,因此输出的结果将是false。
    在这里插入图片描述

1.3 String类常用方法-字符串比较

在这里插入图片描述

在这里插入图片描述

1.5 String类常用方法-遍历、替换、截取、分割操作

在这里插入图片描述

1.6 String类案例-生成6位验证码

在这里插入图片描述

public class Main {
    public static void main(String[] args) {
        System.out.println(generateVerificationCode());
    }

    public static String generateVerificationCode() {
        // 定义一个字符串,包含所有可能的字符
        String allChar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        StringBuilder sb = new StringBuilder();
        Random random = new Random();

        // 循环6次,随机获取一个字符并添加到StringBuilder中
        for (int i = 0; i < 6; i++) {
            int index = random.nextInt(allChar.length());
            sb.append(allChar.charAt(index));
        }

        // 返回生成的验证码
        return sb.toString();
    }
}

上述代码首先定义了一个包含所有可能字符(数字、大写字母和小写字母)的字符串allChar,然后创建了一个StringBuilder对象来构建验证码。在循环中,每次随机生成一个索引,并通过该索引从allChar中获取一个字符,将其添加到StringBuilder中。最后返回由这6个随机字符组成的验证码字符串。

2 ArrayList类详解

2.1 集合概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 ArrayList集合快速了解

在这里插入图片描述

2.3 泛型概述

泛型(Generics)是一种编程语言特性,允许在定义类、接口和方法时使用类型参数(Type Parameters),这些类型参数在编译时可以被实际的类型所替换。通过这种方式,程序员可以在编写代码时推迟指定具体的数据类型,从而创建可重用性强、类型安全的代码组件。

例如,在Java中可以定义一个泛型类:

public class MyGenericClass<T> {//声明时使用T表示未知类型
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

// 使用该泛型类
MyGenericClass<String> stringBox = new MyGenericClass<>();
stringBox.setValue("Hello");
String s = stringBox.getValue(); // 返回 "Hello"

在这个例子中,T 是一个类型参数,代表某种未知的类型。当实例化 MyGenericClass 时,我们可以将 T 替换为具体的类型,如 String。这样,setValuegetValue 方法就能保证操作的是同一类型的对象,提高了类型安全性。

同样地,泛型也可以应用于接口、方法以及容器类,比如Java中的 List<T>Map<K, V> 等。

  • ArrayList< String > :此集合只能操作字符串类型的元素。
  • ArrayList< Integer >:此集合只能操作整数类型的元素。
    注意:泛型只能支持引用数据类型,不支持基本数据类型。

2.4 ArrayList集合常用方法

在这里插入图片描述

2.5 ArrayList集合案例:遍历并删除元素

在这里插入图片描述
由于在遍历过程中修改了集合长度,所以需要从后往前遍历以避免“并发修改异常”(漏掉未检)。

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> scores = new ArrayList<>();
        //往ArrayList对象scores中添加数值
        scores.add(98);
        scores.add(77);
        scores.add(66);
        scores.add(89);
        scores.add(79);
        scores.add(50);
        scores.add(100);

        // 从后往前遍历,遇到低于80分的成绩就删除
        for (int i = scores.size() - 1; i >= 0; i--) {
            if (scores.get(i) < 80) {
                scores.remove(i);
            }
        }

        // 打印过滤后的成绩
        for (int score : scores) {
            System.out.println(score);
        }
    }
}

这样做的缺点是效率相对较低,因为每次删除元素后,列表后面的元素都需要向前移动一位。当需求中数据量较小,这种影响可以忽略不计。对于大量数据的处理,建议采用迭代器或Stream API的方式进行操作。

2.6 ArrayList集合案例:存储自定义类型的对象

在这里插入图片描述
在这里插入图片描述
结论:集合中存储的元素并不是对象本身,而是对象的地址。

2.7 ArrayList集合案例:元素搜索

在这里插入图片描述
首先创建Student实体类:

public class Student {
    private int stuNum;//学号
    private String stuName;//姓名
    private int age;//年龄
    private String stuClass;//班级

    public Student(int stuNum, String stuName, int age, String stuClass) {
        this.stuNum = stuNum;
        this.stuName = stuName;
        this.age = age;
        this.stuClass = stuClass;
    }

    // Getter and Setter 方法
    public int getStuNum() {
        return stuNum;
    }

    public void setStuNum(int stuNum) {
        this.stuNum = stuNum;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public int getAge() {
        return age;
    }

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

    public String getStuClass() {
        return stuClass;
    }

    public void setStuClass(String stuClass) {
        this.stuClass = stuClass;
    }

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

接下来是基于ArrayList实现存储、展示学生信息和搜索功能的后台程序:

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

public class Main {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();

        // 添加学生信息
        students.add(new Student(114514, "张三", 20, "软件工程1班"));
        students.add(new Student(114214, "李四", 21, "软件工程2班"));
        // ... 其他学生信息

        // 展示所有学生信息
        for (Student student : students) {
            System.out.println(student);
        }

        Scanner scanner = new Scanner(System.in);

        while (true) {  // 使用死循环让用户可以不停搜索
            System.out.println("\n请输入要搜索的学生学号:");
            int searchId = scanner.nextInt();
            scanner.nextLine();  // 消耗换行符

            Student foundStudent = searchById(students, searchId);
            if (foundStudent != null) {
                System.out.println("找到的学生信息:");
                System.out.println(foundStudent);
            } else {
                System.out.println("未找到对应学号的学生信息!");
            }
        }
    }

    // 定义按学号搜索学生的函数
    public static Student searchById(ArrayList<Student> students, int id) {
        for (Student student : students) {
            if (student.getStuNum() == id) {
                return student;
            }
        }
        return null;  // 如果没有找到,则返回null
    }
}

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

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

相关文章

陪诊系统|北京陪诊小程序提升陪诊服务效果

随着科技的不断发展&#xff0c;人们对于医疗服务的需求也越来越高。在过去&#xff0c;陪诊师和陪诊公司通常需要通过电话或传真等传统方式与医院进行沟通和安排。然而&#xff0c;现在有了陪诊小程序&#xff0c;这些问题得到了解决。本文将介绍陪诊小程序的开发流程和功能&a…

Python 简单爬虫程序及其工作原理

前言 网络中包含大量的数据&#xff0c;这些数据对于我们来说是非常有价值的&#xff0c;因此编写一个爬虫程序&#xff0c;自动从网页中获取所需的数据&#xff0c;对于信息收集和分析是非常有帮助的。Python 是一种高效而灵活的编程语言&#xff0c;它提供了强大的库和框架来…

SpringBoot学习(三)-整合JDBC、Druid、MyBatis

注&#xff1a;此为笔者学习狂神说SpringBoot的笔记&#xff0c;其中包含个人的笔记和理解&#xff0c;仅做学习笔记之用&#xff0c;更多详细资讯请出门左拐B站&#xff1a;狂神说!!! 一、整合JDBC使用&#xff08;理解&#xff09; 创建项目 勾选依赖启动器 查看依赖 …

vue3 插槽 slot 使用

vue3 插槽 slot 使用 在 Vue3 中&#xff0c;插槽&#xff08;slot&#xff09;是一种重要的组件复用和内容分发机制。通过使用插槽&#xff0c;可以让组件更加灵活和具有可复用性&#xff0c;在不同的地方渲染不同的内容&#xff0c;同时保证相同的样式。 插槽资料 官网介绍&…

【uniapp】多规格选择

效果图 VUE <template> <view><view class"wp-80 pd-tb-40 mg-auto"><button type"warn" click"showDrawer(showRight)">筛选</button></view><!-- 筛选-uni-drawer --><uni-drawer ref"s…

tolist()读取Excel列数据,(Excel列数据去重后,重新保存到新的Excel里)

从Excel列数据去重后&#xff0c;重新保存到新的Excel里 import pandas as pd# 读取Excel文件 file r"D:\\pythonXangmu\\quchong\\quchong.xlsx" # 使用原始字符串以避免转义字符 df pd.read_excel(file, sheet_namenameSheet)# 删除重复值 df2 df.drop_duplica…

HTTP打怪升级之路

新手村 上个世纪80年代末&#xff0c;有一天&#xff0c;Tim Berners-Lee正在工作&#xff0c;他需要与另一台计算机上的同事共享一个文件。他尝试使用电子邮件&#xff0c;但发现电子邮件不能发送二进制文件。Tim Berners-Lee意识到&#xff0c;他需要一种新的协议来共享二进制…

IntelliJ IDEA 如何配置git

在 IntelliJ IDEA 中配置 Git 的步骤如下&#xff1a; 打开 IntelliJ IDEA。找到 File–>Setting–>Version Control–>Git–>Path to Git executable。在 Git 的安装路径下找到 cmd 文件夹下的 git.exe&#xff0c;到此 Git 配置已完成。

Windows 安装配置 Anaconda、CUDA、cuDNN、pytorch-cuda全流程

Windows 安装配置 Anaconda、CUDA、cuDNN、pytorch-cuda全流程 1. 安装Anaconda 网址&#xff1a;https://repo.anaconda.com/archive/ 选择第一个下载即可 双击exe文件&#xff0c;按安装向导安装即可&#xff08;除安装路径自己选择外&#xff0c;其余均可按默认选项&#x…

02 Deep learning algorithm

Neural Networks target&#xff1a; inference&#xff08;prediction&#xff09;training my own modelpractical advice for building machine learning systemdecision Tress application: speech&#xff08;语音识别&#xff09; ----> images(计算机视觉)—> t…

【Redis-09】Redis哨兵机制的实现原理-Sentinel

Sentinel是Redis高可用性的解决方案&#xff1a;由一个或者多个Sentinel实例组成的哨兵系统监视多个主从服务器&#xff0c;并实现主从服务器的故障转移。 Sentinel本质上只是一个运行在特殊模式下的Redis服务器&#xff0c;使用以下命令可以启动并初始化一个Sentinel实例&…

面试题:聊聊 SpringBoot 中的 SPI 机制

文章目录 简介Java SPI实现示例说明实现类1实现类2相关测试 源码分析Spring SPISpring 示例定义接口相关实现 相关测试类输出结果源码分析 总结 简介 SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制&#xff0c;可以用来启用框架扩展和替换组件,主要用于框架…

灸哥问答:数据结构对软件开发的作用

在软件开发的浩瀚海洋中&#xff0c;数据结构如同一座坚固的灯塔&#xff0c;为开发者指明方向&#xff0c;确保他们在构建复杂系统时不会迷失。数据结构不仅仅是编程的基础&#xff0c;更是高效、稳定、可扩展软件的核心。 一、提升算法效率 数据结构与算法紧密相连&#xf…

linux 使用iniparser读取.ini文件的配置信息

为什么要用项目配置文件 对于很多程序中要用的参数如果是可变的&#xff0c;那么最好的处理方式就是通过main(int argc,char **argv) 函数参数传递&#xff0c;或者从别的地方去获取&#xff0c;这其中之一就是配置文件&#xff0c;但是在一个成熟和架构完善的系统&#xff0c…

Spring之强大的DefaultListableBeanFactory

系列文章目录 如何查看类继承结构参考这里 文章目录 系列文章目录一、DefaultListableBeanFactory的类继承实现结构二、实现接口 一、DefaultListableBeanFactory的类继承实现结构 二、实现接口 AliasRegistry&#xff1a;支持别名功能&#xff0c;一个名字可以对应多个别名B…

Leetcode2962. 统计最大元素出现至少 K 次的子数组

Every day a Leetcode 题目来源&#xff1a;2962. 统计最大元素出现至少 K 次的子数组 解法1&#xff1a;滑动窗口 算法如下&#xff1a; 设 mx max⁡(nums)。右端点 right 从左到右遍历 nums。遍历到元素 xnums[right] 时&#xff0c;如果 xmx&#xff0c;就把计数器 co…

qt源码阅读准备

qt源码阅读准备 阅读qt源码前先了解以下知识&#xff0c;对阅读qt源码有极大的好处。 D-pointer介绍 D-pointer介绍 d-pointer它可以把一个类库的实施细节对使用的用户隐藏&#xff0c; 而且对实施的更改不会打破二进制兼容。其基本贯穿qt所有类。 Qt类的的结构 我们以QO…

【unity】基于Obi的绳/杆蓝图、绳杆区别及其创建方法

绳索 是通过使用距离和弯曲约束将粒子连接起来而形成的。由于规则粒子没有方向(只有位置)&#xff0c;因此无法模拟扭转效应(维基百科)&#xff0c;绳子也无法保持其静止形状。然而&#xff0c;与杆不同的是&#xff0c;绳索可以被撕裂/劈开&#xff0c;并且可以在运行时改变其…

第3章 【例题】(完整版)

目录 前言 【例3.1】有关成绩结构体的例子 【例3.2】使用Score类的完整程序 【例 3.3】一个存在错误的程序 【例3.4】用对象赋值语句的例子 【例3.5】为类Score定义一个构造函数 【例3.6】建立对象的同时&#xff0c;用构造函数给数据成员赋初值 【例3.7】用成员初始…

智能手机2024:狂卷“微创新”后如何突破新机遇

文 | 智能相对论 作者 | 楷楷 2023年&#xff0c;智能手机市场终于开始展露曙光。Counterpoint Research数据显示&#xff0c;2023年10月全球智能手机销量同比增长5%&#xff0c;智能手机市场出货量在经历了连续27个月的同比下滑后&#xff0c;首次出现同比正增长。 特别是在…