java集合详解

1.Ecilpse中快捷设置构造方法、get、set方法
自动生成构造方法:
代码区域点右键—Source—Generate Constructors from Superclass… 可自动生成无参数构造方法;

	public Student() {
		// TODO Auto-generated constructor stub
	}

代码区域点右键—Source—Generate Constructors using Fields… 可自动生成带参数构造方法;

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

自动生成getXxx()/setXxx()方法:
代码区域点右键—Source—Generate Getters and Setters… 可自动生成get/set方法;

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

2.创建数组对象

Student[] students = new Student[3];

Student s1 = new  Student("曹操",40);
Student s2 = new  Student("刘备",35);
Student s3 = new  Student("孙权",30);

students[0] = s1;  //将创建的对象赋值给数组对象
students[1] = s2;
students[2] = s3;

for(int i=0; i < students.length; i++){
    System.out.println(students[i].getName()+"---"+students[i].getAge());
}

3.对象数组的内存分析
分析:根据1.中代码分析,由于堆内存中存放的是实例对象,实例化的对象数组存储在这里(认为地址为001),其次是三个实例化的对象s1、s2、s3,也存储在堆内存中,但是该对象包含的方法(包括成员方法和构造方法,假设其地址为0001)包含在方法区中,在s1、s2、s3实例化对象中只是包含方法的在方法区中的地址;此时,将s1、s2、s3对象分别赋值给对象数组students,此时堆内存中的数组对象分别指向堆内存中的s1、s2、s3的实例化对象。
在这里插入图片描述
3.为什么要学习集合类?
为什么会出现集合类:我们学习的是面向对象编程,而面向对象编程的特点是通过对象对事物进行描述。为了方便对多个对象 进行操作,我们就必须对多个对象进行存储,而想要对多个对象进行存储,就不能是一个基本的变量,而是一个容器类型的变量。到目前为止,我们学习过的容器类型变量有:StringBuilder、对象数组。
StringBuilder:结果为一个存储字符串类型的对象,不一定满足我们的要求。
对象数组:长度固定,适应不了变化的需求。

集合类的特点:可以对多个对象进行存储,并且长度可变。

4.创建ArrayList集合对象并添加元素

ArrayList<String> array = new ArrayList<String>();    //这里的array是长度可变的集合类对象
array.add("hello");
array.add("world");
array.add("student");  //这里的添加是依次添加
array.add(1,"age");//在指定位置添加,这里索引1变为age,之前的索引1“world”向后移一个索引位置

for(int i=0; i < array.size(); i++){    //集合类遍历的标准用法
    String s = array.get(i);
    System.out.println(s);
}

常用的ArrayList集合的方法:增(add)、删(delete)、改(set)、查(get、size)

5.ArrayList集合练习–键盘录入数据并进行存储
注:
1.为了提高代码的复用性,把键盘录入的数据传递给学生对象,并存储到集合中的动作用一个方法来实现。
2.定义方法时注意两个明确:明确返回值、明确入参

public static void main(String[] args){
    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());
    }
}
public void addStudent(ArrayList<Student> array){     //封装的方法
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入学生姓名");
    String s1 = sc.nextLine();
    System.out.println("请输入学生年龄");    //这里的age在Student类中定义为String成员
    String s2 = sc.nextLine();
    
    Student s = new Student();       //创建String类并设置内容
    s.setName(name);
    s.setAge(age);
    
    array.add(s);      //将String类数据存储到集合类中
    
}

6.ArrayList集合练习–学生管理系统练习
学生管理系统设计思路:
A:定义学生类
B:学生管理系统的主界面的代码编写
C:学生管理系统的查看所有学生的代码编写
D:学生管理系统的添加学生的代码编写
E:学生管理系统的删除学生的代码编写
F:学生管理系统的修改学生的代码编写

package javaprj;

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

public class StudentManager {
	public static void main(String[] args) {
		ArrayList<Student> array = new ArrayList<Student>();
		while(true) {
			System.out.println("--------------欢迎来到学生管理系统--------------");
			System.out.println("1 查看所有学生");
			System.out.println("2 添加学生");
			System.out.println("3 删除学生");
			System.out.println("4 修改学生");
			System.out.println("5 退出");
			System.out.println("请输入您的选择:");
			
			/*创建键盘录入对象*/
			Scanner sc = new Scanner(System.in);
			String choiceString = sc.nextLine();
			
			switch(choiceString){
			case "1":
				//查看所有学生
				findAllStudent(array);
				break;
			case "2":
				//添加学生
				addStudent(array);
				break;
			case "3":
				//删除学生
				deleteStudent(array);
				break;
			case "4":
				//修改学生
				updataStudent(array);
				break;
			case "5":
				//退出
				//break;
			default:
				System.out.println("谢谢您的使用");
				System.exit(0);  //JVM退出
				break;
			}
		}
	}
	
	public static void findAllStudent(ArrayList<Student> array) {
		/*首先判断集合内有没有数据,若没有数据则不让程序继续执行下去*/
		if(array.size() == 0) {
			System.out.println("不好意思,目前没有学生信息可供查询,请回去重新选择");
			return;   //针对无返回类型的函数,可以用return;结束函数
		}
		
		System.out.println("学号\t\t姓名\t年龄\t居住地");  // "\t"表示tab键
		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);
		String id;
		
		while(true) {
			boolean flag = false;
			System.out.println("请输入学号");
			id = sc.nextLine();
			for(int i=0; i < array.size(); i++) {
				Student s1 = array.get(i);
				if(s1.getId().equals(id)) {
					flag = true;
				}
			}
			
			if(flag == true) {
				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);
		
		boolean flag = false;
		System.out.println("请输入需要删除学生的学号:");
		String id = sc.nextLine();
		for(int i =0; i < array.size(); i++) {
			Student s = array.get(i);
			if(s.getId().equals(id)) {
				array.remove(i);
				flag = true;
				break;
			}
		}
		
		if(flag == true) {
			System.out.println("删除成功");
		}
		else {
			System.out.println("要删除的学生信息不存在");
		}
		
	}
	
	public static void updataStudent(ArrayList<Student> array) {
		Scanner sc = new Scanner(System.in);
		
		boolean flag = false;
		System.out.println("请输入需要修改学生的学号:");
		String id = sc.nextLine();
		
		for(int i=0; i < array.size(); i++) {
			Student s = array.get(i);
			if(s.getId().equals(id)) {
				flag = true;
				System.out.println("请输入学生新姓名:");
				String name = sc.nextLine();
				System.out.println("请输入学生新年龄:");
				String age = sc.nextLine();
				System.out.println("请输入学生新地址:");
				String address = sc.nextLine();
				
				s.setName(name);
				s.setAge(age);
				s.setAddress(address);
				break;
			}
		}
		
		if(flag) {	
			System.out.println("修改成功");
		}
		else {
			System.out.println("输入的学号不存在");
		}
	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值