千锋逆战班:孙华建
在千锋学习第36天
“未来的你会感谢今天奋斗的自己”
今天我学习了java课程Stream,SE综合案例----未完待续
#中国加油!武汉加油!千锋加油!也为自己加油!!!#…
Student类
package com.qf.project.entity;
public class Student {
private int id;
private String name;
private String className;
private int age;
private String gender;
private double javaScore;
private double htmlScore;
private double springScore;
private double totalScore;
//无参
public Student() {}
/**
* 提供基本信息的构造方法
* @param id
* @param name
* @param className
* @param age
* @param gender
*/
public Student(int id, String name, String className, int age, String gender) {
super();
this.id = id;
this.name = name;
this.className = className;
this.age = age;
this.gender = gender;
}
/**
* 提供成绩的构造方法
* @param id
* @param name
* @param className
* @param age
* @param gender
* @param javaScore
* @param htmlScore
* @param springScore
*
*/
public Student(int id, String name, String className, int age, String gender, double javaScore, double htmlScore,
double springScore) {
this(id, name, className, age, gender);
this.javaScore = javaScore;
this.htmlScore = htmlScore;
this.springScore = springScore;
this.totalScore = javaScore+htmlScore+springScore;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public double getJavaScore() {
return javaScore;
}
public void setJavaScore(double javaScore) {
this.totalScore -= this.javaScore;//先把原来的成绩剪掉
this.javaScore = javaScore;//赋值
this.totalScore += this.javaScore;//加上新成绩
}
public double getHtmlScore() {
return htmlScore;
}
public void setHtmlScore(double htmlScore) {
this.totalScore -= this.htmlScore;//先把原来的成绩剪掉
this.htmlScore = htmlScore;//赋值
this.totalScore += this.htmlScore;//加上新成绩
}
public double getSpringScore() {
return springScore;
}
public void setSpringScore(double springScore) {
this.totalScore -= this.springScore;//先把原来的成绩剪掉
this.springScore = springScore;//赋值
this.totalScore += this.springScore;//加上新成绩
}
//总分只能看不能改
public double getTotalScore() {
return totalScore;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", className=" + className + ", age=" + age + ", gender="
+ gender + ", javaScore=" + javaScore + ", htmlScore=" + htmlScore + ", springScore=" + springScore
+ ", totalScore=" + totalScore + "]";
}
}
StudentManager
package com.qf.project.manager;
import com.qf.project.entity.Student;
/**
* 完成所有学生管理系统的相关功能
* 逻辑代码
* @author winter
*
*/
public class StudentManager {
/**
* 增加,采用尾插法
* @param stu
* @return,增加成功返回true,失败返回false
*/
public boolean add(Student stu) {
return false;
}
/**
* 删除
* @param studentID,根据学生唯一的ID
* @return
*/
public Student remove(int studentID) {
return null;
}
/**
* 根据学生ID修改
* @param studentID
* @return,成功返回true,失败返回false
*/
public boolean modify(int studentID) {
return false;
}
/**
* 根据学生ID查找对应的学生
* @param studentID
* @return,查到返回学术对象,失败返回null
*/
public Student get(int studentID) {
return null;
}
/**
* 查询所有,遍历集合
*/
public void get() {
//打印所有学生信息
}
}
MyList
package com.qf.project.util;
/**
* 增加:
* add(E e);
* add(int index,E e);
* 删除:
* remove(E e);
* remove(int index);
* 改:
* set(int index,E e);
* 获取:
* int size();
* Object[] toArray();
* boolean isEmpty();
* boolean contains(Object o);
* MyArrayList<E> subList(int start,int end);
* int indexOf(Object o);
* int lastIndexOf(Object o);
* E get(int index);
* @author winter
*
* @param <E> 泛型 应用在不同类型下,作为集合
*/
public interface MyList<E> {
/**
* 添加方法,添加元素到集合末尾
* @param e泛型
* @return true成功 false失败
*/
boolean add(E e);
/**
* 添加方法,指定下标位置进行添加
* @param index 指定的下标位置
* @param e 元素 泛型
* @return true成功 false失败
*/
boolean add(int index,E e);
/**
* 移除方法,指定移除的元素
* @param o 元素
* @return 移除的元素
*/
E remove(Object o);
/**
* 移除方法,指定移除的下标
* @param index 指定的下标
* @return 移除的元素
*/
E remove(int index);
/**
* 覆盖方法,替换指定下标的元素
* @param index 下标
* @param e 替换的元素
* @return 被替换的元素
*/
E set(int index,E e);
/**
* 获取集合中有效元素的个数
* @return 有效元素的个数
*/
int size();
/**
* 获得当前集合中,所有元素的Object类型的数组
* @return Object[] 包含集合中所有的对象
*/
Object[] toArray();
/**
* 判断当前集合是否为空
* @return 如果一个元素都没有,返回true,有元素返回false
*/
boolean isEmpty();
/**
* 判断某个对象o,在集合中是否存在
* @param o 需要查找的对象
* @return 存在返回true,不存在返回false
*/
boolean contains(Object o);
/**
* 根据需求,返回start到end之间的MyList集合的子集合
* @param start 要求有效下标的范围,不能超过end
* @param end要求有效下标的范围,不能小于等于start
* @return 数据符合要求,返回一个当前集合的子集合。若数据不符合要求,返回NULL
*/
MyList<E> subList(int start,int end);
/**
* 获得指定元素在集合中第一次出现的位置
* @param o 指定的元素
* @return 找到返回值 返回下标,没找到返回-1
*/
int indexOf(Object o);
/**
* 获取指定元素在集合中最后一次出现的位置
* @param o指定的元素
* @return 找到返回值 返回下标,没找到返回-1
*/
int lastIndexOf(Object o);
/**
* 根据指定的下标位置,获得元素
* @param index 下标
* @return 元素对象
*/
E get(int index);
}
MyArrayList
package com.qf.project.util.impl;
import java.util.Arrays;
import com.qf.project.util.MyList;
public class MyArrayList<E> implements MyList<E> {
//1.保存任意类型数据的数组,集合的底层
private Object[] elementData = null;
//2.集合初始容量
private static final int DEFAULT_CAPACITY=10;
//3.保存数组中有效元素个数 (下一个元素插入的下标)
private int size = 0;
public MyArrayList() {
// elementData = new Object[DEFAULT_CAPACITY];
/*
* 统一化当前集合页的初始化方式
*/
this(DEFAULT_CAPACITY);
}
/**
* 手工初始化集合的容量
* @param initCapacity 传入的容量大小:要求传入的容量大于0并且小于Integer.MAX_VALUE -8
*/
public MyArrayList(int initCapacity) {
//判断 initCapacity是否符合要求
if(initCapacity <0 || initCapacity > Integer.MAX_VALUE - 8) {
throw new IllegalArgumentException("传递了一个不符合规范的初始容量!:"+initCapacity);
// elementData = new Object[DEFAULT_CAPACITY]; 错误的!
}else {
elementData = new Object[initCapacity];
}
}
public boolean add(E e) {
if(size == elementData.length) {//数组是否满了
//满了就扩容!
grow(size + 1);
}
elementData[size] = e;
size++;
return true;
}
/**
* 为底层数组elementData做扩容!
* @param minCapacity 扩容需要得最小容量!
*/
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);//要扩容的大小
if(newCapacity > Integer.MAX_VALUE-8) {
throw new OutOfMemoryError("集合溢出了!");
}
if(newCapacity - minCapacity == 0) {
newCapacity = minCapacity;
}
/*
* 1、创建新数组
* 2.拷贝元数据到新数组
* 3.返回新数组的首地址
* 4,替换
*/
elementData = Arrays.copyOf(elementData,newCapacity);
}
@Override
public boolean add(int index, E e) {
checkIndex(index);//1.先判断下标是否合理.不合理,抛异常,程序因异常而终止
if(size == elementData.length) {
grow(size + 1);
}
/*
* 1 3 10 5 7 9
* index = 2; num = 10
*
*/
for(int i = size;i > index; i--) {
elementData[i] = elementData[i-1];
}
elementData[index] = e;
size++;
return true;
}
/**
* 指定下标的安全检查!下标值不符合要求就抛异常
* @param index 下标
*/
private void checkIndex(int index) {
if(index<0 ||index >=size) {
throw new ArrayIndexOutOfBoundsException(index);
}
}
@Override
public E remove(Object o) {
return null;
}
@Override
public E remove(int index) {
return null;
}
@Override
public E set(int index, E e) {
return null;
}
@Override
public int size() {
return size;
}
@Override
public Object[] toArray() {
return null;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public MyList<E> subList(int start, int end) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public E get(int index) {
checkIndex(index);//检查下标
return (E)elementData[index];//返回指定下标的元素
}
}
SystemMain
package com.qf.project.menu;
import com.qf.project.entity.Student;
import com.qf.project.util.MyList;
import com.qf.project.util.impl.MyArrayList;
public class SystemMain {
public static void main(String[] args) {
MyList<Student> list = new MyArrayList<Student>();
Student stu = new Student(1,"孙华建","BK2002",24,"男");
list.add(stu);
list.add(new Student(2,"小明","BK2002",23,"男"));
list.add(new Student(2,"小华","BK2002",22,"女"));
list.add(new Student(2,"小红","BK2002",23,"女"));
for(int i = 0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}