1.集合基础
1.1集合概述
集合的特点:提供一种存储空间可变的存储模型,存储的1数据容量可以发生改变。
集合类有很多,目前我们先学习一个ArrayList
ArrayList<E>
- 可调整大小的数组实现
- <E>是一种特殊的数据类型,泛型?
如何使用?
在出现E的地方使用引用数据类型替换即可
举例:ArrayList<String>、ArrayList<Student>
1.2ArrayList构造方法和添加方法
方法名 | 说明 | public ArrayList() | 创建一个空的集合对象 | public boolean add(E e)? | 将指定的元素追加到此集合的末尾 | public void add(index,E element) | 在此集合中指定位置插入指定的元素 |
package test1;
import java.lang.reflect.Array;
import java.util.ArrayList;
/*
* public ArrayList() 创建一个空的集合对象
public boolean add(E e) 将指定的元素追加到此集合的末尾
public void add(index,E element) 在此集合中指定位置插入指定的元素
* */
public class arrayListDemo1 {
public static void main(String[] args) {
//public ArrayList() 创建一个空的集合对象
ArrayList<String> array = new ArrayList<String>();
System.out.println("Araay:"+ array);
// public boolean add(E e) 将指定的元素追加到此集合的末尾
array.add("Hello");
array.add("World");
System.out.println("Araay:"+ array);
//public void add(index,E element) 在此集合中指定位置插入指定的元素
array.add(1,"521");
//array.add(3,"521");IndexOutOfBoundsException集合索引越界
System.out.println("Araay:"+ array);
}
}
1.3ArrayList常用方法
方法名 | 说明 | public boolean remove(Obiect 0) | 删除指定元素,返回删除是否成功 | public E remove(int index) | 删除指定索引元素,返回被删除元素 | public E set(int index,E element) | 修改指定索引处的元素,返回被修改元素 | public E get(int index) | 返回指定索引处的元素 | public int size() | 返回集合中的元素的个数 |
package test2;
import java.util.ArrayList;
/*
* public boolean remove(Obiect 0) 删除指定元素,返回删除是否成功
public E remove(int index) 删除指定索引元素,返回被删除元素
public E set(int index,E element) 修改指定索引处的元素,返回被修改元素
public E get(int index) 返回指定索引处的元素
public int size() 返回集合中的元素的个数
* */
public class arrayListDemo2 {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<>();
array.add("Hello");
array.add("World");
// public boolean remove(Obiect 0) 删除指定元素,返回删除是否成功
//System.out.println(array.remove("Hello"));
//public E remove(int index) 删除指定索引元素,返回被删除元素
//System.out.println(array.remove(1));
//IndexOutOfBoundsException
//System.out.println(array.remove(2));
//public E set(int index,E element) 修改指定索引处的元素,返回被修改元素
//System.out.println(array.set(0,"1000"));
//IndexOutOfBoundsException
// System.out.println(array.set(2,"1000"));
//public E get(int index) 返回指定索引处的元素
// System.out.println(array.get(0));
// System.out.println(array.get(1));
//IndexOutOfBoundsException
// System.out.println(array.get(2));
//public int size() 返回集合中的元素的个数
System.out.println(array.size());
System.out.println(array);
}
}
1.4案例:ArrayList存储字符串并遍历
?需求:创建一个存储字符的集合,存储三个字符串元素,使用程序实现在控制台遍历该集合
思路:①创建存储字符串的集合
? ? ? ? ? ?②使用for循环遍历该集合
? ? ? ? ? ?③使用get方法获得集合元素
package test3;
import java.util.ArrayList;
/*
* 需求:创建一个存储字符串的集合,存储三个字符串元素,使用程序实现在控制台遍历该集合
* */
public class arrayListDemo3 {
public static void main(String[] args) {
//创建存储字符串的集合
ArrayList<String> array = new ArrayList<>();
array.add("Hello");
array.add("10000");
array.add("World");
//使用for循环遍历该集合
for(int i=0;i<array.size();i++){
//使用get方法获得集合元素
System.out.println(array.get(i));
}
}
}
?1.5案例:存储学生对象并遍历
需求:创建一个存储学生对象的集合,存储三个学生对象,使用程序在控制台遍历这个集合
思路:①首先创建一个学生类,类中定义成员变量age和name,都由private修饰。在类中构造一? ? ? ? ? ? ? ? ? 个无参的构造方法,再构造一个带参的构造方法,定义setxxx()方法和getxxx()方法
? ? ? ? ? ?②创建一个集合对象,然后创建学生对象,将学生对象添加到集合对象中
? ? ? ? ? ?③使用for循环遍历集合,在控制台输出结果
package test4;
/*
学生类
*/
public class Student {
//定义成员变量
private int age;
private String name;
//构造方法
//无参构造方法
public Student(){
}
//带参构造方法
public Student(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name =name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age =age;
}
public int getAge(){
return age;
}
}
package test4;
import java.util.ArrayList;
/*
需求:创建一个存储学生对象的集合,存储三个学生对象,使用程序在控制台遍历这个集合
* */
public class arrayListDemo4 {
public static void main(String[] args) {
//创建集合对象
ArrayList<Student> studentArrayList = new ArrayList<Student>();
//创建学生对象
Student s1 = new Student("吴彦祖",58);
Student s2 = new Student("林青霞", 40);
Student s3 = new Student("张国荣", 50);
//使用add方法将学生对象添加到集合中
studentArrayList.add(s1);
studentArrayList.add(s2);
studentArrayList.add(s3);
//使用for循环遍历集合
for(int i=0;i<studentArrayList.size();i++){
Student s=studentArrayList.get(i);
System.out.println(s.getName()+","+s.getAge());
}
}
}
1.6案例:?存储学生对象并遍历升级版
需求:创建一个存储学生对象的集合,存储三个学生对象,使用程序在控制台遍历这个集合,学? ? ? ? ? ? ? ?生的姓名和年龄来自键盘录入。
思路:①首先创建一个学生类,类中定义成员变量age和name,都由private修饰。在类中构造一? ? ? ? ? ? ? ? ? 个无参的构造方法,再构造一个带参的构造方法,定义setxxx()方法和getxxx()方法
? ? ? ? ? ?②创建一个集合对象,然后创建Scanner对象,从键盘获取输入,创建学生对象,使用? ? ? ? ? ? ? ? ? ? ? setxxx()方法通过传递键盘录入的参数的方式,对学生属性进行赋值。最后把学生对象添? ? ? ? ? ? ? ? 加到集合中。但是为了提高代码的复用性,这里使用定义了一个方法来实现
? ? ? ? ? ?③使用for循环遍历集合,在控制台输出结果
package test5;
/*
学生类
*/
public class Student {
private int age;
private String name;
public Student(){}
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
package test5;
import java.util.ArrayList;
import java.util.Scanner;
/*
* 需求:创建一个存储学生对象的集合,存储三个学生对象,使用程序在控制台遍历这个集合,
* 学生的姓名和年龄来自键盘录入。
* */
public class arrayListDemo5 {
public static void main(String[] args) {
//创建集合对象
ArrayList<Student> array = new ArrayList<>();
/*
//创建Scanner对象,从键盘获取输入
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
//创建学生对象
Student s = new Student();
s.setAge(age);
s.setName(name);*/
//调用方法
addStudent(array);
addStudent(array);
addStudent(array);
//使用for循环遍历集合
for(int i=0;i<array.size();i++){
Student s = array.get(i);
System.out.println(s.getName()+","+s.getAge());
}
}
//定义方法
public static void addStudent(ArrayList<Student>array){
//创建Scanner对象,从键盘获取输入
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
//创建学生对象
Student s = new Student();
s.setAge(age);
s.setName(name);
array.add(s);
}
}
2.学生管理系统
①编写学生类
package studentManagerSystem;
/*1.创建学生类
*/
public class Student {
//定义成员变量
private String name;
private int age;
private String sid;
private int classroom;
//定义无参构造方法alt+insert根据自己的需要选择
public Student() {
}
//定义带四个参数的构造方法
public Student(String name, int age, String sid, int classroom) {
this.name = name;
this.age = age;
this.sid = sid;
this.classroom = classroom;
}
//set()、get()方法
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 getSid() {
return sid;
}
public void setSid(String number) {
this.sid = number;
}
public int getClassroom() {
return classroom;
}
public void setClassroom(int classroom) {
this.classroom = classroom;
}
}
②编写主界面
- 创建一个集合对象,用于接收学生对象
- 用输出语句完成主页面的编写
- 用Scanner完成键盘录入
- 使用switch语句实现操作的选择
- 使用while死循环完成再次回到主页面
③编写添加学生方法
- 创建Scanner对象,从键盘获取学生信息录入
- 使用学生对象的set方法,将参数传递到学生成员变量中
- 使用集合的add方法,将学生对象添加到集合中
- 输出提示符:添加学生成功
- 调用isUsed方法,将返回值赋值给flag
- 如果flag为true,输出提示符,否则break
- 使用while死循环实现程序回到这里
④编写判断添加学生学号是否重复方法
- 判断方法是否需要返回值和传递参数类型
- 设置一个boolean类型的变量,赋值为false
- 使用for循环遍历集合,如果集合中的学生对象的学号与输入学号一致则将变量flag修改为true
- 返回flag?
④编写删除学生方法
- 创建Scanner对象,从键盘获取要删除的学生学号
- 使用for循环遍历集合,判断当输入学号与集合中的元素的学号相同时,使用集合对象的remove方法删除,当输入学号不存在时,输出:您输入的学号有误。
⑤编写修改学生方法
- 创建Scanner对象,从键盘获取要修改的学生学号
- 使用for循环遍历集合,当输入学号与集合中的元素的学号相同时,输出提示符,让用户输入新的姓名、年龄、班级,使用set方法将这些属性赋值给成员变量,使用集合对象的set方法,将修改后的学生对象添加到集合中。
⑥编写查看全部学生方法
- 使用if语句做判断,当集合对象.size()==0时,输出:请先添加对象,并使用return语句结束方法。
- 如果集合对象中的元素不为空时,使用输出语句输出一个打印格式。
- 使用for循环遍历集合,使用集合对象.get获得集合元素。在通过Student.get()获得各个成员变量的值,并将它们打印出来。?
package studentManagerSystem;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManager {
public static void main(String[] args) {
//创建集合对象
ArrayList<Student> array = new ArrayList<>();
//循环实现回到主页面
while (true) {
//2.编写主页面
System.out.println("---------欢迎来到学生管理系统----------");
System.out.println("1添加学生");
System.out.println("2删除学生");
System.out.println("3修改学生");
System.out.println("4查看全部学生");
System.out.println("5退出");
//从键盘获取输入
Scanner sc = new Scanner(System.in);
System.out.println("请选择你要执行的操作(1-5):");
int i = sc.nextInt();
switch (i) {
case 1:
addStudent(array);
break;
case 2:
removeStudent(array);
break;
case 3:
setStudent(array);
break;
case 4:
lookStudent(array);
break;
case 5:
System.out.println("谢谢使用");
// break;
System.exit(0);//JVM退出
}
}
}
//编写添加学生方法
public static void addStudent(ArrayList<Student> array){
//使用while死循环实现
//创建Scanner对象,从键盘录入学生信息
Scanner sc = new Scanner(System.in);
String sid;
while (true) {
System.out.println("请输入学生学号:");
sid = sc.nextLine();
boolean flag = isUsed(array, sid);
if (flag) {
System.out.println("你输入的学号已经被使用,请重新输入");
}else{
break;
}
}
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
System.out.println("请输入学生班级:");
int classroom = sc.nextInt();
//创建学生对象,接收学生信息
Student s1 = new Student();
s1.setName(name);
s1.setClassroom(classroom);
s1.setAge(age);
s1.setSid(sid);
//将学生添加到集合中
array.add(s1);
//输出提示符
System.out.println("添加学生成功");
}
//编写判断学生学号是否重复
public static boolean isUsed(ArrayList<Student> array,String sid){
boolean flag = false;
//遍历集合
for (int i=0;i<array.size();i++){
Student s = array.get(i);
if(s.getSid().equals(sid)){
flag = true;
}
}
return flag;
}
//编写删除学生方法
public static void removeStudent(ArrayList<Student> array){
//从键盘获取想要删除的学生的学号
System.out.println("请输入要删除的学生学号:");
Scanner sc = new Scanner(System.in);
String sid = sc.nextLine();
//遍历集合,将该元素删除
for (int i=0;i<array.size();i++){
Student s = array.get(i);
if(s.getSid().equals(sid)){
array.remove(i);
System.out.println("删除学生成功");
}else{
System.out.println("找不到学生学号");
}
}
}
//编写修改学生方法
public static void setStudent(ArrayList<Student> array){
//从键盘获取要修改的学生的学号
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的学生的学号:");
String sid = sc.nextLine();
//遍历集合,找到与输入学生学号一致的元素
for (int i=0;i<array.size();i++){
Student s = array.get(i);
if(s.getSid().equals(sid)){
System.out.println("请输入修改后的学生姓名:");
String name = sc.nextLine();
s.setName(name);
System.out.println("请输入修改后的学生年龄");
int age = sc.nextInt();
s.setAge(age);
System.out.println("请输入修改后的学生班级");
int classroom = sc.nextInt();
s.setClassroom(classroom);
array.set(i,s);
System.out.println("修改学生成功");
}else{
System.out.println("找不到学生学号");
}
}
}
//编写查看全部学生
public static void lookStudent(ArrayList<Student> array){
//添加判断模块,如果集合中无元素,输出提示符
if(array.size()==0){
System.out.println("请先添加学生");
return;
}
System.out.println("学号\t\t姓名\t\t年龄\t\t班级");
//遍历集合
for (int i=0;i<array.size();i++){
Student s = array.get(i);
System.out.println(s.getSid()+"\t\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getClassroom());
}
}
}
?
|