1.对象数组
1.1 对象数组概述
A:基本类型的数组:存储的元素为基本类型
int[] arr={1,2,3,4}
B:对象数组:存储的元素为引用类型
Student[] stus=new Student[3];
Student代表一个自定义类
stus数组中stus[0],stus[1],stus[2]的元素数据类型为Student,都可以指向一个Student对象
案例
package com.igeek_03;
/**
* @author Lynn
* @create 2020-11-25-14:21
*/
import sun.management.counter.perf.PerfInstrumentation;
/**
* 数组:
* 基本类型的数组--int,char····
* 对象类型的数组--保存对象的数组--首先要有对象
*
* 当前这个学生类是一个实体类,用于后面的对象类型数组
*/
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 +
'}';
}
}
package com.igeek_03;
/**
* @author Lynn
* @create 2020-11-25-14:25
*/
/**
* 创建对象类型的数组---对象就是学生--Student类型的数组
*
* 做以下几件事情
* 1.定义学生类
* 2.创建学生类型的数组
* 3.创建学生对象
* 4.把学生对象存放进数组
* 5.遍历学生数组
*/
public class StudentDemo {
public static void main(String[] args) {
//2.创建学生类型的数组
Student[] students=new Student[3];//长度为3
//取值
System.out.println(students[0]+" "+students[1]+" "+students[2]);
System.out.println("----------------------");
//把学生对象作为元素赋值给学生数组
students[0]=new Student("王嘉尔",27);
students[1]=new Student("王一博",23);
students[2]=new Student("王俊凯",22);
System.out.println(students[0]+" "+students[1]+" "+students[2]);
//Student{name='王嘉尔', age=27} Student{name='王一博', age=23} Student{name='王俊凯', age=22}
//遍历数组
for (int i = 0; i <students.length ; i++) {
//从数组中拿到一个学生对象就实例化
Student s=students[i];
System.out.println(s);
// System.out.println(students[i]);
System.out.println(s.getName()+" "+s.getAge());
}
}
}
2.集合之ArrayList
Java中的集合:
其实集合与数组作用类似,就是用于同时保存和处理多个数据
但是数组一旦声明长度,就无法改变;
集合可以自动的变换长度,更加的灵活,可以同时保持不同类型的数组
—性能是次于数组的
ArrayList是数组类型的集合//属于util包下的
特点:
1.长度可变
2.可以保存不同类型的数据—前提是没有泛型
泛型:是jdk5.0版本推出的
作用:为了规范集合保存数据的类型,可以使用泛型进行约束
ArrayList添加新元素
package com.igeek_05;
/**
* @author Lynn
* @create 2020-11-25-14:40
*/
import java.util.ArrayList;
/**
* Java中的集合:
* 其实集合与数组作用类似,就是用于同时保存和处理多个数据
* 但是数组一旦声明长度,就无法改变;
* 集合可以自动的变换长度,更加的灵活,可以同时保持不同类型的数组
* --性能是次于数组的
*
* ArrayList是数组类型的集合//属于util包下的
* 特点:
* 1.长度可变
* 2.可以保存不同类型的数据--前提是没有泛型
*
* 泛型:是jdk5.0版本推出的
* 作用:为了规范集合保存数据的类型,可以使用泛型进行约束
*/
public class ArrayListDemo1 {
public static void main(String[] args) {
//演示集合的使用
//1.创建对象
ArrayList array=new ArrayList();
//2.添加数据--任意的数据--add()方法
array.add("Lynn");//String类型
array.add(18);//int类型
array.add(true);
array.add(3.1415926535);
//输出结果
System.out.println(array);
System.out.println("------------------");
//演示泛型的使用
ArrayList<String> list=new ArrayList<String>();
//添加数据
list.add("吴奇隆");
list.add("苏有朋");
list.add("陈志朋");
//list.add(123);//会报错,因为只能输出字符串类型
//输出
System.out.println(list);
}
}
ArrayList删改查方法
A:获取元素
public E get(int index):返回指定索引处的元素
B:集合长度
public int size():返回集合中的元素的个数
C:删除元素
public boolean remove(Object o):删除指定的元素,返回删除是否成功
public E remove(int index):删除指定索引处的元素,返回被删除的元素
D:修改元素
public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
package com.igeek_05;
/**
* @author Lynn
* @create 2020-11-25-15:12
*/
import java.util.ArrayList;
/**
* ArrayList集合的删改查
* 1.获取元素:E get(int index)--返回指定索引处的元素
* 2.集合长度:int size()--返回一个集合中元素的个数
* 3.删除元素:boolean remove(Object obj)--删除指定的元素,返回的是一个Boolean值
* E remove(int index)--删除指定索引处的元素,返回的是删除的元素
* 4.修改元素:E set(int index,E e)--修改指定索引处的元素,返回的是被修改的元素
*/
public class ArrayListDemo2 {
public static void main(String[] args) {
//创建集合对象
ArrayList<String> list=new ArrayList<String>();
//添加元素
list.add("刘德华");
list.add("郭富城");
list.add("黎明");
list.add("张学友");
//获取元素
System.out.println("get:"+list.get(0));//get:刘德华
//删除元素
// System.out.println("remove:"+list.remove(1));//remove:郭富城
// System.out.println("remove:"+list.remove("黎明"));//remove:true
//查看集合
System.out.println(list);
//修改元素
list.set(0,"刘芙蓉");
// System.out.println("set:"+list.set(0,"刘芙蓉"));
System.out.println(list);
}
}
ArrayList遍历
集合的遍历思想和数组的遍历思想相同
循环遍历容器,依次取出里面的元素即可
package com.igeek_05;
import java.util.ArrayList;
/**
* @author Lynn
* @create 2020-11-25-15:30
*/
/**
* ArrayList集合的遍历
* 与数组的遍历一样,长度改成size
*/
public class ArrayListDemo3 {
public static void main(String[] args) {
//创建集合对象
ArrayList<String> list=new ArrayList<String>();
list.add("Tom");
list.add("Lynn");
list.add("马宝国");
for (int i = 0; i <list.size() ; i++) {
//获取下标所对应的元素
System.out.println(list.get(i));
}
}
}
ArrayList集合案例
ArrayList练习之存储字符串并遍历
向集合中添加任意四个字符串,遍历集合,依次打印取出的字符串
package com.igeek_03;
import java.util.ArrayList;
/**
* @ClassName: ArrayListTest
* @Description: 存储字符串并遍历
* @date 2017年10月14日 上午10:09:10
* Company www.igeekhome.com
*
* 存储字符串并遍历
*
* 分析:
* A:创建集合对象
* B:添加字符串元素
* C:遍历集合
*/
public class ArrayListTest {
public static void main(String[] args) {
//创建集合对象
ArrayList<String> array = new ArrayList<String>();
//添加字符串元素
array.add("向问天");
array.add("刘正风");
array.add("左冷禅");
array.add("风清扬");
//遍历集合
for(int x=0; x<array.size(); x++) {
String s = array.get(x);
System.out.println(s);
}
}
}
ArrayList练习之获取满足要求的元素
给定一个字符串数组:{“张三丰”,“宋远桥”,“张无忌”,“殷梨亭”,“张翠山”,“莫声谷”},将数组中的元素添加到集合中,并把所有姓张的人员打印到控制台上
package com.igeek_03;
import java.util.ArrayList;
/**
* @ClassName: ArrayListTest2
* @Description: ArrayList练习之获取满足要求的元素
* @date 2017年10月14日 上午10:11:10
* Company www.igeekhome.com
*
* 给定一个字符串数组:{“张三丰”,“宋远桥”,“张无忌”,“殷梨亭”,“张翠山”,“莫声谷”},
* 将数组中的元素添加到集合中,并把所有姓张的人员打印到控制台上。
*
* 分析:
* A:定义字符串数组
* B:创建集合对象
* C:遍历字符串数组,获取到每一个字符串元素
* D:把获取到的字符串元素添加到集合
* E:遍历集合
* 要判断每一个字符串元素是否以"张"开头,如果是,就输出在控制台
*/
public class ArrayListTest2 {
public static void main(String[] args) {
//定义字符串数组
String[] strArray = {"张三丰","宋远桥","张无忌","殷梨亭","张翠山","莫声谷"};
//创建集合对象
ArrayList<String> array = new ArrayList<String>();
//遍历字符串数组,获取到每一个字符串元素
for(int x=0; x<strArray.length; x++) {
//把获取到的字符串元素添加到集合
array.add(strArray[x]);
}
//遍历集合
for(int x=0; x<array.size(); x++) {
String s = array.get(x);
//要判断每一个字符串元素是否以"张"开头,如果是,就输出在控制台
if(s.startsWith("张")) {
System.out.println(s);
}
}
}
}
ArrayList练习之存储自定义对象并遍历
A:自定义一个学生类,学生中有姓名和年龄属性,生成满参构造与空参构造
生成属性对应的getter/setter方法
B:在测试类中使用满参构造创建三个学生对象,然后将每个学生对象均添加到ArrayList集合中
C:遍历这个ArrayList集合,依次打印出每个学生的姓名和年龄
package com.igeek_06;
/**
* @author Lynn
* @create 2020-11-25-14:21
*/
import sun.management.counter.perf.PerfInstrumentation;
/**
* 当前这个学生类是一个实体类
*/
public class Student {
//属性
private String name;
private String age;
//构造函数
public Student() {
}
public Student(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.igeek_06;
/**
* @author Lynn
* @create 2020-11-25-15:35
*/
import java.util.ArrayList;
import java.util.Scanner;
/**
* 键盘录入数据并且存储和遍历
*
* 创建一个学生类的集合,遍历学生集合
*
* 分析:
* 1.定义学生类
* 2.创建集合对象
* 3.键盘录入数据,创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
* 4.把学生对象存放在集合中
* 5.遍历集合
*/
public class StudentDemo {
public static void main(String[] args) {
//2.创建集合对象--泛型是学生类型
ArrayList<Student> array=new ArrayList<Student>();
//调用方法
addStudent(array);
addStudent(array);
addStudent(array);
//遍历集合
for (int i = 0; i < array.size() ; i++) {
Student s=array.get(i);
System.out.println(s.getName()+" "+s.getAge());
}
}
//定义一个方法用于封装添加学生
//建议修饰符使用private,因为这个方法是只在当前这个类中使用,为了封装的彻底性
public static void addStudent(ArrayList<Student> array){
//键盘录入数据,创建成对象,把键盘录入的数据赋值给学生对象的成员变量
Scanner sc=new Scanner(System.in);
System.out.println("请输入学生的姓名:");
String name=sc.nextLine();
System.out.println("请输入学生的年龄:");
String age=sc.nextLine();
//创建学生对象
Student s=new Student();
//属性赋值
s.setName(name);//name是获取到的用户输入的名字
s.setAge(age);
//把学生对象放进集合中保存
array.add(s);
// sc.close();
}
}
练习
package practice;
/**
* @author Lynn
* @create 2020-11-25-16:12
*/
/**
* 实现1注册,2登录,3退出
*/
public class User {
//定义成员变量
private String name;
private String birth;
private String hobby;
private String password;
//构造方法
public User() {
}
public User(String name, String birth, String hobby, String password) {
this.name = name;
this.birth = birth;
this.hobby = hobby;
this.password = password;
}
//get/set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", birth='" + birth + '\'' +
", hobby='" + hobby + '\'' +
", password='" + password + '\'' +
'}';
}
}
package practice;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @author Lynn
* @create 2020-11-25-16:12
*/
public class Test {
public static void main(String[] args) {
//创建集合对象存放User数据
ArrayList<User> list=new ArrayList<User>();
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("1注册,2登录,3退出");
int num=sc.nextInt();
if(num==1){
register(list);
}
else if(num==2){
login(list);
}
else if(num==3){
System.out.println("谢谢使用!");
System.exit(0);
}
else {
System.out.println("输入方式有误!");
}
}
}
//定义register方法
public static void register(ArrayList<User> list){
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的用户名:");
String name=sc.nextLine();
System.out.println("请输入登录密码:");
String password=sc.nextLine();
System.out.println("请输入你的出生日期:");
String birth=sc.nextLine();
System.out.println("请输入你的爱好;");
String hobby=sc.nextLine();
//创建用户对象
User u=new User();
//属性赋值
u.setName(name);
u.setPassword(password);
u.setBirth(birth);
u.setHobby(hobby);
//将用户对象保存在集合中
list.add(u);
System.out.println("注册成功!");
}
//定义login方法
public static void login(ArrayList<User> list){
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的用户名:");
String name=sc.nextLine();
System.out.println("请输入登录密码:");
String password=sc.nextLine();
User u=new User();
u.setName(name);
u.setPassword(password);
//进行判断
boolean flag=false;
for (int i = 0; i < list.size() ; i++) {
if(list.get(i).getName().equals(u.getName()) && list.get(i).getPassword().equals(u.getPassword())){
System.out.println("以下是你的个人信息"+list.get(i));
flag=true;
}
}
if(!flag){
System.out.println("你的用户名或者密码输入错误!");
}
}
}
学生管理系统案例实现
package practice03;
/**
* @author Lynn
* @create 2020-11-26-9:31
*/
/**
* 这是一个学生的实体类
*/
public class Student {
//属性--为了方便获取字符串的信息,统一设置为字符串类型
private String id;
private String name;
private String age;
private String address;
public Student() {
}
public Student(String id, String name, String age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
package practice03;
/**
* @author Lynn
* @create 2020-11-26-9:28
*/
import java.util.ArrayList;
import java.util.Scanner;
/**
* 这是一个学生管理系统
* 步骤:
* 1.定义一个学生类
* 2.学生管理系统主界面的编写
* 3.学生管理系统的查看所有学生的信息
* 4.添加学生信息
* 5.删除学生信息
* 6.修改学生信息
*/
public class StudentMangerTest {
public static void main(String[] args) {
//定义一个学生类型集合
ArrayList<Student> array=new ArrayList<Student>();
//为了用户体验度,设计一个界面
//利用循环的方式可以重复的展示界面,直到退出程序纠结束循环
while(true){
//主界面的欢迎词
System.out.println("---------------------欢迎来到学生管理系统------------------------");
System.out.print("1 查看所有学生"+"\t");
System.out.print("2 添加学生"+"\t");
System.out.print("3 删除学生"+"\t");
System.out.print("4 修改学生"+"\t");
System.out.print("5 退出系统"+"\t");
System.out.println();
//键盘录入获取
Scanner sc=new Scanner(System.in);
String choiceString=sc.nextLine();
//用开关键--switch···case
switch (choiceString){
case "1":
//查看所有学生
findAllAtudent(array);
break;
case "2":
//添加学生
addStudent(array);
break;
case "3":
//删除学生
deleteStudent(array);
break;
case "4":
//修改学生
updateStudent(array);
break;
case "5":
//退出系统
default:
System.out.println("谢谢使用,欢迎下次再来!");
System.exit(0);//Java中提供的
break;
}
}
}
//封装一个方法用于查询学生的所有信息
public static void findAllAtudent(ArrayList<Student> array){
//首先来判断集合中是否有数据,如果没有数据,就给出提示,并让该方法不继续往下执行
if(array.size()==0){
System.out.println("抱歉!目前没有学生信息可供查询,请回去重新选择你的操作");
return;//将当前的方法直接结束
}
//有学生的情况下--遍历查询
//\t表示一个Tab键--制表符
System.out.println("学号\t姓名\t年龄\t居住地");
for (int i = 0; i < array.size() ; i++) {
Student s= array.get(i);
//输出属性
System.out.println(s.getId()+"\t"+
s.getName()+"\t"+
s.getAge()+"\t"+
s.getAddress());
}
}
//封装一个方法用于添加学生信息
public static void addStudent(ArrayList<Student> array){
//键盘录入对象
Scanner sc=new Scanner(System.in);
//所有的对学生的操作都是基于id,所以我们把id属性放到循环的外面
String id;
//能够实现重复添加学生的信息,所以使用循环
while (true){
//判断一下这个学号是不是已经存在
System.out.println("请输入学号:");
id=sc.nextLine();
//定义一个标记--假设不存在
boolean flag=false;
//遍历学号--就是遍历数组
for (int i = 0; i < array.size() ; i++) {
Student s= array.get(i);
//获取学号
if(s.getId().equals(id)){
flag=true;//学号存在
break;
}
}
//这个时候flag就是true
if(flag){
System.out.println("你的学号已经被占用,请重新输入!");
}else {
break;
}
}
//通过验证可以添加学生
System.out.println("请输入学生姓名:");
String name=sc.nextLine();
System.out.println("请输入学生年龄:");
String age=sc.nextLine();
System.out.println("请输入学生住址:");
String address=sc.nextLine();
//创建学生对象
Student s=new Student();
//赋值
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//把学生保存到集合中
array.add(s);
//给出提示
System.out.println("添加学生成功!");
}
//封装一个方法用于删除学生信息
public static void deleteStudent(ArrayList<Student> array) {
//删除学生的思路:键盘录入一个学号,到集合中去查找,看是否有学生使用的是该学号,如果有就删除该学生
//创建键盘录入对象
Scanner sc=new Scanner(System.in);
System.out.println("请输入你要删除的学生的学号:");
String id=sc.nextLine();
//遍历集合看看这个id所对应的学生是不是存在--设置一个索引
int index=-1;
for (int i = 0; i < array.size() ; i++) {
//获取每一个学生
Student s= array.get(i);
//判断学生的学号和键盘录入的id进行比较
if(s.getId().equals(id)){//要删除的对象存在
index=i;
break;
}
}
if(index==-1){
System.out.println("抱歉!你要删除的学号对应的学生信息不存在,请回去重新你的选择");
}else {
array.remove(index);
System.out.println("删除成功!");
}
}
//封装一个方法用于修改学生信息
public static void updateStudent(ArrayList<Student> array){
//修改学生的思路:键盘录入一个学号,到集合中去查找,看是否有学生使用的是该学号,如果有就修改该学生
//创建键盘录入对象
Scanner sc=new Scanner(System.in);
System.out.println("请输入你要修改的学生的学号:");
String id=sc.nextLine();
//遍历集合看看这个id所对应的学生是不是存在--设置一个索引
int index=-1;
for (int i = 0; i < array.size() ; i++) {
//获取每一个学生
Student s= array.get(i);
//判断学生的学号和键盘录入的id进行比较
if(s.getId().equals(id)){//要修改的对象存在
index=i;
break;
}
}
if(index==-1){
System.out.println("抱歉!你要修改的学号对应的学生信息不存在,请回去重新你的选择");
}else {
//开始进行修改
System.out.println("请输入新的学生姓名:");
String name=sc.nextLine();
System.out.println("请输入新的学生年龄:");
String age=sc.nextLine();
System.out.println("请输入新的学生住址:");
String address=sc.nextLine();
//创建一个新的对象
Student s=new Student();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//修改集合中的学生对象--实际上就是把原来的信息替换
array.set(index,s);
System.out.println("修改成功!");
}
}
}