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;}@Overridepublic 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;}@Overridepublic 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/setpublic 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;}@Overridepublic 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···caseswitch (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就是trueif(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("修改成功!");}}}
