java学习笔记_07常用API(String、ArrayList)

API (Application Programming Interface,应用程序编程接口)
⚫ Java写好的技术(功能代码),咱们可以直接调用。
⚫ Oracle 也为Java提供的这些功能代码提供了相应的 API文档(技术使用说明书) 。
下载API文档:
http://www.oracle.com/technetwork/java/javase/downloads/index.html 

➢         String
◆   String类概述
◆   String类创建对象的2种方式
◆   String类常见面试题
◆   String类常用API-字符串内容比较
◆   String类常用API-遍历、替换、截取、分割操作
◆   String类案例实战

➢         ArrayList
◆   集合概述
◆   ArrayList集合快速入门
◆   ArrayList对泛型的支持
◆   ArrayList常用API、遍历
◆   ArrayList集合案例:遍历并删除元素
◆   ArrayList集合案例:存储自定义类型的对象
◆   ArrayList集合案例:元素搜索

String 概述
⚫ java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
⚫ Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。
String类的特点详解
⚫ String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。

public static void main(String[] args) { 
String name = "传智";
name += "教育"; 
name +="中心";
System.out.println(name); 
}

输出结果:传智教育中心

从上述代码可以看出字符串变量name指向的字符串对象,那为何还说字符串不可变呢?

⚫       String变量每次的修改其实都是产生并指向了新的字符串对象。
⚫       原来的字符串对象都是没有改变的,所以称不可变字符串。

 

 有什么区别吗?(面试常考)
⚫ 以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
⚫    通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。

String s1 = "abc"; 
String s2 = "abc";
System.out.println(s1 == s2); // true 
char[] chs = {'a', 'b', 'c'};
String s3 = new String(chs);
String s4 = new String(chs);
System.out.println(s3 == s4); // false

1、字符串对象的特点有哪些?
⚫ 双引号创建的字符串对象,在字符串常量池中存储同一个。
⚫ 通过new 构造器创建的字符串对象,在堆内存中分开存储。

String常见面试题
⚫ 问题:下列代码的运行结果是?

public class Test2 {
public static void main(String[] args) { 
String s2 = new String("abc"); //这句代码实际上创建了两个对象
String s1 = "abc";
System.out.println(s1 == s2); //false
}
}

 String常见面试题


public class Test3 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c"; 
System.out.println(s1 == s3);//false ==引用数据类型比较地址 String是一个类

}
public class Test4 {
public static void main(String[] args) { 
String s1 = "abc";
String s2 = "a" + "b" + "c"; 
System.out.println(s1 == s2);//true

}

Java存在编译优化机制,程序在编译时:  “a”    + “b”    + “c”    会直接转成    "abc"

public class StringDemoAPI3 {
public static void main(String[] args) { 
String sysLoginName = “itheima”;
Scanner sc = new Scanner(System.in); 
System.out.println(“请您输入您的登录名称"); 
String loginName = sc.next();
System.out.println(sysLoginName ==  loginName); 
}
}
结论:字符串的内容比较不适合用“==”比较。

字符串的内容比较:

public boolean equals (Object anObject)

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


public boolean equalsIgnoreCase (String anotherString) 

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

开发中什么时候使用==比较数据
⚫     基本数据类型比较时使用。

 案例
String类开发验证码功能
需求:
⚫ 随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
分析:
①     定义一个String类型的变量存储验a-zA-Z0-9之间的全部字符。
②     循环5次,随机一个范围内的索引,获取对应字符连接起来即可。

需求:
⚫     模拟用户登录功能,最多只给三次机会。
分析:
①     系统后台定义好正确的登录名称,密码。
②     使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登 
录成功则不再进行登录;登录失败给出提示,并让用户继续登录。

手机号码屏蔽
需求
⚫ 键盘录入一个手机号,将中间四位号码屏蔽,最终效果为:158****5689
分析
①    键盘录入一个字符串。
②    调用字符串对象的截取API,截取字符串前三位、后四位。
③ 将前三位 连接“****”然后继续连接后四位,输出最终结果即可。

集合是与数组类似,也是一种容器,用于装数据的。
数组的特点

⚫  数组定义完成并启动后,类型确定、长度固定。
⚫ 问题:在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的。

集合的特点

⚫ 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
⚫     集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
⚫     集合还提供了许多丰富、好用的功能,而数组的功能很单一。

1、数组和集合的元素存储的个数问题?
⚫      数组定义后类型确定,长度固定
⚫      集合类型可以不固定,大小是可变的。
2、数组和集合适合的场景
⚫      数组适合做数据个数和类型确定的场景
⚫      集合适合做数据个数不确定,且要做增删元素的场景

泛型概述
⚫ ArrayList<E>:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。
举例:
⚫     ArrayList<String> :此集合只能操作字符串类型的元素。
⚫     ArrayList<Integer>:此集合只能操作整数类型的元素。
注意:集合中只能存储引用类型,不支持基本数据类型。 

1、怎么去统一ArrayList集合操作的元素类型?
⚫      使用泛型:<数据类型>
⚫      ArrayList<String> list1 = new  ArrayList();

 遍历并删除元素值
需求:
⚫ 某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100
⚫     现在需要先把成绩低于80分以下的数据去掉。
分析:
①     定义ArrayList集合存储多名学员的成绩。
②     遍历集合每个元素,如果元素值低于80分,去掉它。

1、  从集合中遍历元素,并筛选出元素删除它,应该怎么解决?
⚫    从集合后面遍历然后删除,可以避免漏掉元素

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
	/* 遍历并删除元素值
需求:
⚫ 某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100
⚫     现在需要先把成绩低于80分以下的数据去掉。
分析:
①     定义ArrayList集合存储多名学员的成绩。
②     遍历集合每个元素,如果元素值低于80分,去掉它。

1、  从集合中遍历元素,并筛选出元素删除它,应该怎么解决?
⚫    从集合后面遍历然后删除,可以避免漏掉元素。*/
		ArrayList<Integer> list =new ArrayList();
		list.add(98);
		list.add(77);
		list.add(66);
		list.add(89);
		list.add(79);
		list.add(50);
		list.add(100);
		for(int i=list.size()-1;i>=0;i--) {
			if (list.get(i)<80) {
				list.remove(i);
			 }
		   }for(int j=0;j<list.size();j++) {
			   System.out.print(list.get(j)+" ");
		   }
		}
	}
		
	
	
 

影片信息在程序中的表示
需求
⚫     某影院系统需要在后台存储上述三部电影,然后依次展示出来。
分析
①     :定义一个电影类,定义一个集合存储电影对象。
② :创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
③     :遍历集合中的3个对象,输出相关信息。 

import java.util.ArrayList;

public class SystemDemo {
    public static void main(String[] args) {
        ArrayList <Movie> movies = new ArrayList<>();
        movies.add(new Movie("《肖生克的救赎》", 9.7 ,  "罗宾斯"));
        movies.add(new Movie("《霸王别姬》", 9.6 ,  "张国荣、张丰毅"));
        movies.add(new Movie("《阿甘正传》", 9.5 ,  "汤姆.汉克斯"));
                System.out.println(movies);
        for (int i = 0; i < movies.size(); i++ ) {
            Movie movie = movies.get(i);
            System.out.println("片名:" + movie.getName());
            System.out.println("评分:" + movie.getScore());
            System.out.println("主演:" + movie.getAcotr());
        }
//[Movie@1b6d3586, Movie@4554617c, Movie@74a14482]
片名:《肖生克的救赎》
评分:9.7
主演:罗宾斯
片名:《霸王别姬》
评分:9.6
主演:张国荣、张丰毅
片名:《阿甘正传》
评分:9.5
主演:汤姆.汉克斯
    }
}
public class Movie {
    private String name;
    private double score;
    private String acotr;
    public Movie(String name, double score, String acotr) {
        this.name = name;
        this.score = score;
        this.acotr = acotr;
    }
// ... getter + setter

    public String getName() {
        return name;
    }

    public double getScore() {
        return score;
    }

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

    public void setScore(double score) {
        this.score = score;
    }

    public void setAcotr(String acotr) {
        this.acotr = acotr;
    }

    public String getAcotr() {
        return acotr;
    }
}

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

 

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

public class SystemDemo {
    public static void main(String[] args) {
        /* 学生信息系统的数据搜索
需求
⚫      后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。
分析
①       定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。
② 提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。
③       使用死循环,让用户可以不停的搜索。*/
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student(2018302, "叶孤城", 23, "护理一班"));
        list.add(new Student(2018303, "东方不败", 23, "推拿二班"));
        for (int i = 0; i < list.size(); i++) {
            System.out.print("学号:" + list.get(i).getId() + " " + "名字:" + list.get(i).getName()
                    + " " + "年龄:" + list.get(i).getAge() + " " + "班级:" + list.get(i).getClassname());
            System.out.println();
        }
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入要查找的id");
            int id = sc.nextInt();
            if (Find(list, id) == null) {
                System.out.println("查无此人");
            }else
            for (int i = 0; i < list.size(); i++) {
                System.out.print("学号:" + list.get(i).getId() + " " + "名字:" + list.get(i).getName()
                        + " " + "年龄:" + list.get(i).getAge() + " " + "班级:" + list.get(i).getClassname());
            }
        }
    }
    public static ArrayList<Student> Find(ArrayList<Student> s, int id) {

        for (int i = 0; i < s.size(); i++) {
            if (id == s.get(i).getId()) {
                return s;
                }
            }

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

}
import java.util.ArrayList;

public class Student {
    /* 学生信息系统的数据搜索
需求
⚫       后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。
分析
①       定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。
②       提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。
③       使用死循环,让用户可以不停的搜索。*/
    private int id;
    private String name;
    private int age;
    private String classname;

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

    public Student() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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;
    }

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值