Java 高级程序设计:实验一 泛型

代码地址:Github

实验目的和要求

  • 初步熟悉泛型的基本概念及用途,熟悉应用开发环境:Eclipse的使用;
  • 掌握利用泛型设计常见的类。

实验内容

Question 01

修改程序清单19-1中的GenerisStack类,使用数组而不是ArrayList来实现它。需要在给栈添加新元素之前检查数组的大小。如果数组满了,则创建一个新数组,该数组容量是原先数组容量的两倍,然后将当前数组的元素复制到新数组当中。

image-20220913150847664

package question01;

import java.util.Arrays;

/**
 * @author Owem
 * @date 2022/9/13 15:15
 * @description TODO
 **/
public class GenerisStack<E> {
    private Object[] list = new Object[2];
    private int size = 0;

    public int getSize() {
        return size;
    }

    public E peek() {
        if (this.isEmpty()) {
            System.out.println("空数组");
            return null;
        }
        return (E) list[size - 1];
    }

    public void push(E o) {
        if (size == list.length) {
            list = Arrays.copyOf(list, list.length * 2);
        }
        list[size++] = o;
    }

    public E pop() {
        if (this.isEmpty()) {
            System.out.println("空数组");
            return null;
        }
        return (E) list[--size];
    }

    public boolean isEmpty() {
        return size == 0;
    }

    @Override
    public String toString() {
        StringBuilder result = new StringBuilder("GenerisStack List:{ ");
        for (int i = 0; i < size; i++) {
            result.append(list[i]).append(" ");
        }
        result.append("}");
        return result.toString();
    }
}

Question 02

实现一个程序满足以下要求

  1. 系统不少于三个类(Student,Teacher,SortUtils),Student,Teacher都具有一个String类型的编号(学号,教师号)
  2. SortUtils类中需要使用泛型,SortUitls有一个方法可以传入若干Student或者若干Teacher可以按照他们的编号降序排列后打印输出
  3. 整个过程中不能使用数组
  4. 排序比较算法需要自己实现
  5. 程序主过程是程序启动,随机生成20个学生,然后按照学号降序打印,然后随机生成20个老师,然后按照教师号降序打印

Person.java

package question02;

/**
 * @author Owem
 * @date 2022/9/13 16:31
 * @description TODO
 **/
public class Person {
    public int compareTo(Object o){
        return 0;
    }

    public Object clone() {
        return null;
    }

    public String toString() {
        return "";
    }
}

SortUtils.java

package question02;

import java.util.ArrayList;

/**
 * @author Owem
 * @date 2022/9/13 15:57
 * @description TODO
 **/
public class SortUtils {
    public static void sortID(ArrayList<Person> args) {
        for (int i = 0; i < args.size(); i++) {
            for (int j = i; j < args.size(); j++) {
                if (args.get(i).compareTo(args.get(j)) < 0) {
                    Person temp = (Person) args.get(i).clone();
                    args.set(i, args.get(j));
                    args.set(j, temp);
                }
            }
        }
        for(Object l : args) {
            System.out.println(l);
        }
    }
}

Starter.java

package question02;

import java.util.ArrayList;
import java.util.Random;

/**
 * @author Owem
 * @date 2022/9/13 15:59
 * @description TODO
 **/
public class Starter {
    public static void main(String[] args) {
        ArrayList<Person> persons = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            persons.add(new Student(getRandomString(5)));
        }
        SortUtils.sortID(persons);
        System.out.println("---------------");
        persons = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            persons.add(new Teacher(getRandomString(5)));
        }
        SortUtils.sortID(persons);
    }


    //length用户要求产生字符串的长度
    public static String getRandomString(int length){
        String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//        String str="0123456789";
        Random random=new Random();
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<length;i++){
            int number=random.nextInt(62);
//            int number=random.nextInt(10);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
}

Student.java

package question02;

/**
 * @author Owem
 * @date 2022/9/13 15:57
 * @description TODO
 **/
public class Student extends Person implements Cloneable {
    private String stuID;

    public Student() {
    }

    public Student(String stuID) {
        this.stuID = stuID;
    }

    public String getStuID() {
        return stuID;
    }

    public void setStuID(String stuID) {
        this.stuID = stuID;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuID='" + stuID + '\'' +
                '}';
    }

    @Override
    public Student clone() {
        return new Student(this.stuID);
    }

    @Override
    public int compareTo(Object o) {
        return this.stuID.compareTo(((Student) o).stuID);
    }
}

Teacher.java

package question02;

/**
 * @author Owem
 * @date 2022/9/13 15:57
 * @description TODO
 **/
public class Teacher extends Person implements Cloneable{
    private String teaID;

    public Teacher() {
    }

    public Teacher(String teaID) {
        this.teaID = teaID;
    }

    public String getTeaID() {
        return teaID;
    }

    public void setTeaID(String teaID) {
        this.teaID = teaID;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "teaID='" + teaID + '\'' +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        return this.teaID.compareTo(((Teacher) o).getTeaID());
    }

    @Override
    public Teacher clone() {
        return new Teacher(this.teaID);
    }
}