Java SE基础知识详解第[6]期—常用API(String、ArrayList)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Java SE基础知识详解第[6]期—常用API(String、ArrayList)

常用API(String、ArrayList)

什么是API?

API (Application Programming Interface,应用程序编程接口)

⚫ Java写好的技术(功能代码),可以直接调用。

⚫ Oracle 也为Java提供的这些功能代码提供了相应的 API文档(技术使用说明书)

String简单介绍

String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。

ArrayList简单介绍

ArrayList代表的是集合类,集合是一种容器,与数组类似,不同的是集合的大小是不固定的

通过创建ArrayList对象表示得到一个集合容器,同时ArrayList提供了比数组更好用,更丰富的API(功能)供程序员使用。

一、String

1.1String类概述

java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。

⚫ Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。

String类的特点详解

String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。””方式给出的字符串对象,在字符串常量池中存储

示例代码如下:

publicstaticvoidmain(String[] args) {
Stringname="张三";
name+="李四";
name+="王五";
System.out.println(name); // 张三李四王五    }

其内存执行机制如下:

Step1:首先执行main()方法,将main()方法添加到栈内存中,然后执行第一行代码,在栈内存中开辟一块空间用于存储变量name中的数据,在堆内存中的字符串常量池中生成字符串对象张三,再将该对象的地址传给name变量存储,在后续访问时通过变量name中存储的地址访问该字符串(String类型比较特殊,打印时不打印地址,而是打印地址指向的字符串的值,在后续继承章节会讲解)。

Step2:执行第二行代码,在堆内存中的字符串常量池中生成字符串对象李四,后与name中地址指向的字符串张三运算衔接,生成新的字符串张三李四存储到堆内存中(非字符串常量池,因为是运算生成的而不是定义的),再将生成的新的字符串张三李四的地址赋给name变量存储张三李四两个对象在创建后并没有改变,只是String类型的变量name指向了新的对象的地址)

Step3:执行第三行代码,原理同第二行。

Step4:执行第四行代码,将此时String类型变量name中存储的张三李四王五(实际上存储的该对象的地址值)打印出来。

1.2String类创建对象的2种方式

方式一:直接使用””定义。(推荐方式)

方式二:通过String类的构造器创建对象。

通过String类的构造器创建对象

构造器

说明

public String()

创建一个空白字符串对象,不含有任何内容(几乎不用)

public String(String)

根据传入的字符串内容,来创建字符串对象(几乎不用)

public String(char[] c)

根据字符数组的内容,来创建字符串对象

public String(byte[] b)

根据字节数组的内容,来创建字符串对象

示例代码如下:

publicstaticvoidmain(String[] args) {
// 方式一:直接使用””定义(推荐方式)Stringname="张三";
// 方式二 通过String类的构造器创建对象// 1.public String()    创建一个空白字符串对象,不含有任何内容(几乎不用)Strings1=newString();
System.out.println(s1); // 打印结果为空白(不是null)// 2.public String(String)  根据传入的字符串内容,来创建字符串对象(几乎不用)Strings2=newString("张三");
// 3.public String(char[] c)    根据字符数组的内容,来创建字符串对象char[] chars= {'a', 'b', '张', '三'};
Strings3=newString(chars); // 内部自动把字符数组的内容连接到一起System.out.println(s3); // ab张三// 4.public String(byte[] b)    根据字节数组的内容,来创建字符串对象byte[] bytes= {33, 97, 65, 102};
Strings4=newString(bytes); // 内部自动把字节数组的内容转换成字符型然后连接到一起System.out.println(s4); // !aAf    }

两种构造方式的区别?

””方式定义的字符串对象,在字符串常量池中存储,而且相同内容只会存储一份

通过构造器new出来的对象,每new一次都会产生一个新的对象,放在堆内存中

示例代码如下:

// 两种构造方式的区别?// 以””方式定义的字符串对象,在字符串常量池中存储,而且相同内容只会存储一份Stringstring1="abc";
Stringstring2="abc";
System.out.println(string1==string2); // true,变量中存储的是地址,二者地址相同// 通过构造器new出来的对象,每new一次都会产生一个新的对象,放在堆内存中char[] chars2= {'a', 'b', 'c', 'd'};
Stringstring3=newString(chars2);
Stringstring4=newString(chars2);
System.out.println(string3==string4); // false 每次new出来的对象地址均不同

Java存在编译优化机制,程序在编译时,a + b + c(都是字面量参与运算,不含变量)会直接转换成abc

示例代码如下:

// 注:Java存在编译优化机制,程序在编译时,”a” + ”b” + ”c”(都是字面量参与运算,不含变量)会直接转换成”abc”。Stringstring5="abc";
Stringstring6="a"+"b"+"c";
System.out.println("string5 == string6:"+ (string5==string6)); // trueStringstring7="ab";
Stringstring8=string7+"c"; // 有变量参与,仍然在堆内存中生成新的对象,而不是在字符串常量池中优化衔接System.out.println("string7 == string8:"+ (string7==string8)); // false

注:在工程文件的out文件夹中可以找到.java文件编译后的.class文件,查看编译后(实际运行)的源代码。

Out.png

1.3String类常用API-字符串内容比较

现有如下代码:

publicstaticvoidmain(String[] args) {
// 正确登录名和密码StringloginName="张三";
StringloginPassword="123456";
// 用户输入登录名和密码Scannersc=newScanner(System.in);
System.out.println("请输入登陆名:");
Stringname=sc.next();
System.out.println("请输入登陆密码:");
Stringpassword=sc.next();
// 判断用户输入的账号、密码是否正确if ((loginName==name) & (loginPassword==password)) { // false 字符串内容比较不适合用"=="System.out.println("登陆成功");
        } else {
System.out.println("用户名或密码错误");
        }
    }

输入登录名:张三,登陆密码:123456

由于正确登录名、密码是在堆内存中的字符串常量池中生成的,用户输入的登录名、密码是在堆内存中new出来的对象在堆内存中生成(接收)的,二者地址肯定不同,因此字符串内容比较不适合用"=="

字符串内容比较:

推荐使用String类提供的“equals”比较:只关心内容一样即可

常用API-字符串内容比较

方法名

说明

public boolean equals (Object an Object)

将此字符串与指定对象进行比较。只关心字符内容是否一致

public boolean equalsIgnoreCase

(String anotherString)

将此字符串与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致

 

示例代码如下:

Scannersc=newScanner(System.in);
StringloginCode="Abc123";
System.out.println("请输入验证码:");
Stringcode=sc.next(); // ABC123System.out.println(loginCode.equals(code)); // false equals()是精确比较System.out.println(loginCode.equalsIgnoreCase(code)); // true equalsIgnoreCase()是忽略字母大小写比较

==equals()两种类型的比较方式如何选择?

基本数据类型变量中存储的是具体值,其比较常使用==,引用数据类型如String类型中存放的是地址,有可能会出现地址不一样但两个地址指向的具体数据一样的情况,因此其比较常用equals()

1.4String类常用API-遍历、替换、截取、分割操作

String常用API

方法名

说明

public int length()

返回此字符串的长度

public char charAt(int index)

获取某个索引位置处的字符

public char[] toCharArray()

将当前字符串转换成字符数组返回

public String substring(int beginIndex, int endIndex)

根据开始和结束索引进行截取,得到新的字符串

左闭右开

public String substring(int beginIndex)

从传入的索引处截取,截取到末尾,得到新的字符串

public String replace(CharSequence target, CharSequence replacement)

使用新值,将字符串中的旧值替换,得到新的字符串

public String[] split(String regex)

根据传入的规则切割字符串,得到字符串数组返回

public boolean contains(CharSequence s)

判断字符串中是否包含该关键字

public boolean startsWiths(String prefix)

判断字符串是否以该关键字为前缀

 

示例代码如下:

publicstaticvoidmain(String[] args) {
// 1.public int length()    返回此字符串的长度Stringname="我爱你中国China";
intlength=name.length(); // 获取字符串name的长度System.out.println("\"我爱你中国China\"的长度是"+length);
// 2.public char charAt(int index)  获取某个索引位置处的字符charai=name.charAt(1); // 获取字符串name中第1个索引位置的字符System.out.println("\"我爱你中国China\"中第2个字符为:"+ai);
System.out.println("----------遍历字符串中的每一个字符------------");
for (inti=0; i<name.length(); i++) {
System.out.print(i==name.length() -1?name.charAt(i) +"\n" : name.charAt(i) +"\t");
        }
// 3.public char[] toCharArray()    将当前字符串转换成字符数组返回char[] chars=name.toCharArray(); // 把字符串name中的每个字符都放到了字符型数组chars中的各个索引位置for (inti=0; i<chars.length; i++) {
System.out.print(i==chars.length-1?chars[i] +"\n" : chars[i] +"\t");
        }
// 4.public String substring(int beginIndex, int endIndex)  根据开始和结束索引进行截取,得到新的字符串(左闭右开)Stringname2="Java是最厉害的编程语言!";
Stringrs1=name2.substring(0, 9); // 截取第0-8位System.out.println(rs1); // Java是最厉害的Stringrs2=name2.substring(5, 14); // 截取第5-13位System.out.println(rs2); // 最厉害的编程语言!// 5.public String substring(int beginIndex)    从传入的索引处截取,截取到末尾,得到新的字符串Stringrs3=name2.substring(4); // 截取第4位至末尾System.out.println(rs3); // 是最厉害的编程语言!// 6.public String replace(CharSequence target, CharSequence replacement)   使用新值,将字符串中的旧值替换,得到新的字符串 CharSequence等同于StringStringname3="金三胖是最厉害的80后,金三胖胖胖的,我好爱金三胖!";
Stringrs4=name3.replace("金三胖", "***"); // 将字符串name3中的"金三胖"全部替换为"***",其中第一个参数是被替换的关键字,第二个参数为替换后的关键字System.out.println(rs4); // ***是最厉害的80后,***胖胖的,我好爱***!// 7.public String[] split(String regex)    根据传入的规则切割字符串,得到字符串数组返回StringpersonName="张三,李四,王五,赵六";
Stringnames[] =personName.split(","); // 根据","将字符串切割,每一部分都添加到数组中的各个索引位置System.out.print("姓名为:");
for (inti=0; i<names.length; i++) {
System.out.print(i==names.length-1?names[i] +"\n" : names[i] +"\t"); // 张三  李四  王五  赵六        }
// 8.public boolean contains(CharSequence s) 判断字符串中是否包含该关键字booleanisContain=name3.contains("金三胖");
System.out.println(isContain); // true// 9.public boolean startsWiths(String prefix) 判断字符串是否以该关键字为前缀System.out.println(name3.startsWith("金三胖")); // trueSystem.out.println(name3.startsWith("金三胖是")); // trueSystem.out.println(name3.startsWith("金三胖是1")); // false    }

1.5String案例操作

1.5.1String类开发验证码功能

需求:随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

分析:

① 定义一个String类型的变量存储验a-zA-Z0-9之间的全部字符。

② 循环5次,随机一个范围内的索引,获取对应字符连接起来即可。

示例代码如下:

publicstaticvoidmain(String[] args) {
// 定义可能出现的字符信息Stringdata="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 循环5次,每次生成一个随机的索引,提取对应的字符,连接起来即可Randomr=newRandom();
Stringcode=""; // 定义一个变量,用于存储验证码,初始值为空for (inti=0; i<5; i++) {
intindex=r.nextInt(data.length()); // 在字符串长度内,随机一个索引code+=data.charAt(index);
        }
System.out.println("随机生成的验证码是:"+code);
    }

1.5.2模拟用户登陆功能

需求:模拟用户登录功能,最多只给三次机会。

分析:

① 系统后台定义好正确的登录名称,密码。

② 使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登录成功则不再进行登录;登录失败给出提示,并让用户继续登录。

示例代码如下:

publicstaticvoidmain(String[] args) {
// 定义正确的登陆名称和密码StringloginName="admin";
StringloginPassword="admin";
// 定义一个循环,让用户登陆,最多循环3次Scannersc=newScanner(System.in);
for (inti=0; i<3; i++) {
System.out.println("您还有"+ (3-i) +"次登陆机会");
System.out.println("请输入用户名:");
Stringname=sc.next();
System.out.println("请输入密码:");
Stringpassword=sc.next();
// 判断登陆是否成功if (loginName.equals(name)) {
if (loginPassword.equals(password)) {
System.out.println("登陆成功!");
break;
                } else {
System.out.println("密码错误,请重新输入!");
                }
            } else {
System.out.println("账号不存在,请重新输入");
            }
        }
    }

1.5.3手机号码加密

需求键盘录入一个手机号,将中间四位号码屏蔽,最终效果为:

TelephoneNumber.png

分析

① 键盘录入一个字符串。

② 调用字符串对象的截取API,截取字符串前三位、后四位。

③ 将前三位 连接“****”然后继续连接后四位,输出最终结果即可。

示例代码如下:

publicstaticvoidmain(String[] args) {
Scannersc=newScanner(System.in);
while (true) {
System.out.println("请输入手机号码:");
// 键盘录入手机号码StringtelNumber=sc.next();
//判断号码是否为11位,如果不是则给出提示并重新输入if (telNumber.length() !=11) {
System.out.println("您输入的号码错误,请输入11位的数字!");
            } else {
// 截取号码的前三位和后四位StringtelSubstring1=telNumber.substring(0, 3); // 截取前三位StringtelSubstring2=telNumber.substring(7); // 截取后四位System.out.println("加密后的手机号码为"+telSubstring1+"****"+telSubstring2);
break;
            }
        }
    }

二、ArrayList

数组与集合的异同:

同:集合与数组类似,也是一种容器,用于装数据。

异:①数组定义完成并启动后,类型确定,长度固定。集合的大小不固定,启动后可以动态变化,类型也可以选择不固定

②数组功能比较单一,集合提供了许多丰富、好用的功能。

数组适合做个数和类型确定的场景。集合适合做元素个数不确定且需要进行增删改查的业务场景。

2.1ArrayList集合快速入门

ArrayList是集合中的一种,它支持索引。

ArrayList集合的对象获取

构造器

说明

public ArrayList()

创建一个空的集合对象

ArrayList集合添加元素的方法

方法名

说明

Public boolean add(E e)

将指定的元素追加到此集合的末尾

Public void add(int index, E element)

在此集合中的指定位置插入指定的元素

 

示例代码如下:

publicstaticvoidmain(String[] args) {
// 实例化ArrayList集合的对象ArrayListlist=newArrayList();
// 向ArrayList集合中添加数据list.add("Java");
//        System.out.println(list.add("Java")); // truelist.add("MySQL");
list.add(122);
list.add('中');
list.add(true);
System.out.println(list); // [Java, MySQL, 122, 中, true] 变量中存储的仍然是ArrayList对象的地址,但是经过改进后可以打印出其中存储的内容// 给指定索引位置添加元素list.add(2,100); // 在第二个索引位置添加数据100System.out.println(list); // [Java, MySQL, 100, 122, 中, true] 其他数据向后顺延,而不是被替换掉    }

2.2ArrayList对于泛型的支持

泛型概述:

ArrayList<E>就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。

如ArrayList<String>:此集合只能操作字符串类型的元素。ArrayList<Integer>:此集合只能操作整数类型的元素。

注:集合中泛型声明只能存储引用类型,不支持基本数据类型。

示例代码如下:

ArrayListlist=newArrayList(); // 实例化对象时没有使用泛型约束,在此集合内可以添加任意类型的数据list.add("Java");
list.add(120);
ArrayList<String>list2=newArrayList<String>();// 使用泛型约束,在此集合内仅可以添加String类型的数据ArrayList<String>list3=newArrayList<>(); // JDK1.7开始,后面的泛型类型声明可以不写list2.add("Java");
//        list2.add(120); // 报错,数据类型只能是String//        ArrayList<int> list4 = new ArrayList<>(); // 报错,集合中泛型声明只能存储引用类型,不支持基本数据类型。ArrayList<Integer>list4=newArrayList<>(); // Integer相当于int的引用类型list4.add(10);
//        list4.add("apple"); // 报错,数据类型只能是Integer    }

2.3ArrayList常用API、遍历

ArrayList集合常用API

方法名称

说明

public E get(int index)

返回指定索引处的元素

public int size()

返回集合中的元素的个数

public E remove(int index)

删除指定索引处的元素,返回被删除的元素

public boolean remove(Object o)

删除指定的元素,返回删除是否成功

public E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

 

注:当元素中有一模一样的元素时,remove(Object o)默认删除第一次出现的元素

示例代码如下:

publicstaticvoidmain(String[] args) {
ArrayList<String>list=newArrayList<>();
list.add("Java");
list.add("Java");
list.add("MySQL");
list.add("MyBatis");
list.add("HTML");
//        1.public E get(int index) 返回指定索引处的元素Stringe=list.get(3);
System.out.println(e); // MyBatis//        2.public int size()   返回集合中的元素的个数intlength=list.size();
System.out.println(length); // 5// 完成集合的遍历System.out.print("集合中的元素为:");
for (inti=0; i<list.size(); i++) {
System.out.print(i==list.size() -1?list.get(i) +"\n" : list.get(i) +"\t");
        }
//        3.public E remove(int index)  删除指定索引处的元素,返回被删除的元素System.out.println(list); // [Java, Java, MySQL, MyBatis, HTML]Stringe2=list.remove(2);
System.out.println(e2); // MySQLSystem.out.println(list); // [Java, Java, MyBatis, HTML]    此时集合中索引为2的元素已经被删除,集合总长度相应-1//        4.public boolean remove(Object o) 删除指定的元素,返回删除是否成功booleanisDelete=list.remove("MyBatis");
System.out.println(isDelete); // trueSystem.out.println(list); // [Java, Java, HTML]list.remove("Java");
System.out.println(list); // [Java, HTML]   当元素中有一模一样的元素时,remove(Object o)默认删除第一次出现的元素//        5.public E set(int index,E element)   修改指定索引处的元素,返回被修改的元素System.out.println(list); // [Java, HTML]Stringe3=list.set(0, "张三");
System.out.println(e3); // JavaSystem.out.println(list); // [张三, HTML]    }

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

需求:某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100现在需要先把成绩低于80分以下的数据去掉。

分析:

① 定义ArrayList集合存储多名学员的成绩。

② 遍历集合每个元素,如果元素值低于80分,去掉它。

示例代码如下:

publicstaticvoidmain(String[] args) {
// 创建一个ArrayList集合存储班级中学生的成绩ArrayList<Integer>scores=newArrayList<>();
scores.add(98);
scores.add(77);
scores.add(66);
scores.add(89);
scores.add(79);
scores.add(50);
scores.add(100);
System.out.println(scores); // [98, 77, 66, 89, 79, 50, 100]// 把低于80分的成绩从集合中去掉//        错误代码//        for (int i = 0; i < scores.size(); i++) {//            int score = scores.get(i);//            if (score <= 80) {//                scores.remove(i); // 直接删除第i个索引元素,集合数目发生变化,后续索引向前顺延,遍历发生越位,导致没有完全遍历到所有元素,出现错误//            }//        }//        System.out.println(scores); // [98, 66, 89, 50, 100]// 正确代码一:删除后退位,保证i++后回到当前位置//        for (int i = 0; i < scores.size(); i++) {//            int score = scores.get(i);//            if (score <= 80) {//                scores.remove(i);//                i--; // 删除某个元素后,使i向前退一位,正好弥补越位情况//            }//        }//        System.out.println(scores); // [98, 89, 100]// 正确代码二:从后往前遍历、删除for (inti=scores.size() -1; i>=0; i--) {
intscore=scores.get(i);
if (score<=80) {
scores.remove(i); // 每次从后向前遍历,删除某个元素,不会改变其之前元素的索引,不会发生越位情况            }
        }
System.out.println(scores); // [98, 89, 100]    }

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

需求某影院系统需要在后台存储上述三部电影,然后依次展示出来。

分析

① 定义一个电影类,定义一个集合存储电影对象。

② 创建3个电影对象,封装相关数据,把3个对象存入到集合中去。

③ 遍历集合中的3个对象,输出相关信息。

示例代码如下:

测试类:

publicclassArrayListTest5 {
publicstaticvoidmain(String[] args) {
// 定义电影类// 创建3个电影对象,用于封装电影信息Moviem1=newMovie("肖申克的救赎", 9.7, "罗宾斯");
Moviem2=newMovie("霸王别姬", 9.6, "张国荣、张丰毅");
Moviem3=newMovie("阿甘正传", 9.5, "汤姆.汉克斯");
// 创建一个Movie类型的ArrayList集合,将3个对象放到集合中ArrayList<Movie>list=newArrayList<>();
list.add(m1);
list.add(m2);
list.add(m3);
System.out.println(list); // 3个Movie类型对象的地址// 遍历Movie类型的集合中的每个Movie对象,访问其内容System.out.println("电影名\t\t评分\t\t主演");
for (inti=0; i<list.size(); i++) {
System.out.print(list.get(i).getName() +"\t\t");
System.out.print(list.get(i).getScore() +"\t\t");
System.out.println(list.get(i).getActor());
        }
    }
}

注:集合中存储的元素并不是对象本身,而是对象的地址。

2.6ArrayList集合案例:元素搜索

需求后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。

分析

① 定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。

② 提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。

③ 使用死循环,让用户可以不停的搜索。

示例代码如下:

测试类:

publicclassArrayListTest6 {
publicstaticvoidmain(String[] args) {
// 创建学生类// 创建学生对象,封装学生信息Studentstu1=newStudent("20180302", "叶孤城", 23, "护理一班");
Studentstu2=newStudent("20180303", "东方不败", 23, "护理一班");
Studentstu3=newStudent("20180304", "西门吹雪", 26, "护理一班");
Studentstu4=newStudent("20180305", "梅超风", 26, "护理一班");
// 创建一个Movie类型的ArrayList集合,将4个对象放到集合中ArrayList<Student>stuList=newArrayList<>();
stuList.add(stu1);
stuList.add(stu2);
stuList.add(stu3);
stuList.add(stu4);
// 遍历Student类型的集合中的每个Student对象,访问其内容System.out.println("学号\t\t姓名\t\t年龄\t\t班级");
for (inti=0; i<stuList.size(); i++) {
System.out.println(stuList.get(i).getStdNo() +"\t"+stuList.get(i).getName() +"\t"+stuList.get(i).getAge() +"\t"+stuList.get(i).getClassName());
        }
// 定义方法完成按照学号搜索的功能// 定义死循环,调用按照学号搜索的方法,完成搜索Scannersc=newScanner(System.in);
while (true) {
System.out.println("请输入要查询的学号:");
StringstdNo=sc.next();
Studentstudent=getStudentById(stuList, stdNo); // 调用按照学号搜索的方法,返回学生对象或null// 判断返回值是否为null,若返回值不是null,将该学生对象的各项信息打印输出,否则给出相应提示if (student!=null) {
System.out.println("查询结果如下");
System.out.println("学号\t\t姓名\t\t年龄\t\t班级");
System.out.println(student.getStdNo() +"\t"+student.getName() +"\t"+student.getAge() +"\t"+student.getClassName());
            } else {
System.out.println("很抱歉,没有相关信息");
            }
        }
    }
/*** create by: 全聚德在逃烤鸭、* description: 根据学生学号查询学生对象并返回* create time: 2022/4/8 0008 21:26** @param stuList 存储全部学生对象的集合* @param stdNo   搜索的学生学号* @return com.itheima.arraylist.Student    学生对象 | null*/publicstaticStudentgetStudentById(ArrayList<Student>stuList, StringstdNo) {
// 遍历全部学生对象for (inti=0; i<stuList.size(); i++) {
Studentstudent=stuList.get(i); // 定义一个Student类型变量student,用于存储集合中当前第i个学生对象元素// 判断当前第i个索引位置的学生对象中的学生学号与要搜索的学生学号是否一致,若一致,则将当前学生对象返回,否则继续遍历if (student.getStdNo().equals(stdNo)) { // 判断内容是否一致returnstudent; // 将第i个索引位置的学生对象返回            }
        }
returnnull; // 遍历结束后,没有找到符合条件的学生对象,返回null    }
}
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
存储 Java 测试技术
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
【6月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
12 2
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
|
2天前
|
安全 Java
Java中的StringBuffer:深入解析与最佳实践
Java中的StringBuffer:深入解析与最佳实践
|
2天前
|
Oracle 安全 Java
JAVA用Mail发送API的方法步骤教程
使用Java和Mail发送API实现自动化邮件发送,提高效率。步骤包括:1. 安装JDK并配置JAVA_HOME,2. 添加JavaMail库(可通过Maven或官网下载)。配置邮件发送涉及邮件服务器地址、端口和认证信息。创建邮件会话、邮件消息对象,然后使用Transport发送。示例代码展示完整流程。注意处理认证失败、连接问题和邮件发送失败等常见问题。
|
2天前
|
编解码 前端开发 Java
Java网络API之Netty深度解析
Java网络API之Netty深度解析
9 0
|
2天前
|
Java API
Java 8新特性之Lambda表达式和Stream API
【5月更文挑战第31天】本文将详细介绍Java 8中的两个重要特性:Lambda表达式和Stream API。通过对比传统编程方式,我们将探讨这两个特性如何简化代码、提高可读性和性能。文章还将通过实例演示如何使用Lambda表达式和Stream API进行集合操作、过滤和转换等任务。
|
3天前
|
Java API 数据处理
Java 8中的Stream API简介及其在数据处理中的应用
【5月更文挑战第30天】 本文旨在介绍Java 8中引入的Stream API,它是一种用于处理集合的新方法。与传统的循环和迭代器相比,Stream API提供了一种更简洁、高效的方式来处理数据。文章将详细介绍Stream API的基本概念、常用操作以及在实际项目中的应用场景。
|
3天前
|
Java API
Java 8新特性之Stream API详解
【5月更文挑战第30天】本文将详细介绍Java 8中的一个重要新特性——Stream API。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明式的方式处理数据,使得代码更加简洁、易读。文章将从Stream的基本概念、创建方式、常用操作以及实战案例等方面进行详细讲解,帮助读者深入理解并掌握Stream API的使用。
|
4天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第29天】本文将介绍Java 8中的两个重要特性——Lambda表达式和Stream API。Lambda表达式简化了函数式编程,使得代码更加简洁易读;而Stream API则为集合操作提供了更加高效且易于理解的方法。通过本文的学习,你将掌握这两个特性的基本用法,并了解如何在实际项目中应用它们。
|
4天前
|
安全 Java API
Java 8中的Stream API:简介与实用指南深入理解Java并发编程:线程安全与锁优化
【5月更文挑战第29天】本文旨在介绍Java 8中引入的Stream API,这是一种用于处理集合的新方法。我们将探讨Stream API的基本概念,以及如何使用它来简化集合操作,提高代码的可读性和效率。 【5月更文挑战第29天】 在Java并发编程中,线程安全和性能优化是两个核心议题。本文将深入探讨如何通过不同的锁机制和同步策略来保证多线程环境下的数据一致性,同时避免常见的并发问题如死锁和竞态条件。文章还将介绍现代Java虚拟机(JVM)针对锁的优化技术,包括锁粗化、锁消除以及轻量级锁等概念,并指导开发者如何合理选择和使用这些技术以提升应用的性能。
|
5天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第28天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的语法特性,允许我们将函数作为参数传递给方法或者作为返回值。而Stream API是一种处理集合的新方式,它提供了一种高效且简洁的方式来处理数据。通过学习这两个特性,我们可以编写出更加简洁、高效的Java代码。