大家好,欢迎来到IT知识分享网。
目录
使用Java集合完成学生选课系统
集合框架
概念与作用、体系结构、实际应用
集合概述
集合的概念
现实生活中:很多的事物凑在一起
数学中的集合:具有共同属性的事物的总体
Java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象
集合的作用
在类的内部,对数据进行组织; 简单而快速的搜索大数量的条目; 有的集合接口,提供了一系列排列有有序的元素,并且可以在序列中间快速的插入或者删除有关元素; 在类的内部,对数据进行组织; 简单而快速的搜索大数量的条目; 有的集合接口,提供了一系列排列有序序的元素,并且可以在序列中间快速的插入或者删除有关元素; 有的集合接口,提供了映射关系,可以以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型。 与数组的对比——为何选择集合而不是数组 数组的长度固定,集合长度可变 数组只能通过下标访问元素,类型固同定,而有的集合可以通过任意类型查找所映射的具体对象
Java集合框架体系结构
Collection接口 &List接口简介
Collection接口、子接口以及实现类
Collection接口
是List、Set和Queue接口的父接
定义了可用于操作List、Set和Que ue的方法-增删改查
List接口及其实现类–ArrayLi st
List是元素有序并且可以重复的的集合,被称为序列
List可以精确的控制每个元素的的插入位置,或删除某个位置元素ArrayList–数组序列,是L ist的一个重要实现类
ArrayList底层是由数组实现的
创建学生类和课程类:
package com.imooc.collection; import java.util.HashSet; import java.util.Set; / * 学生类 * @author Administrator * */ public class Student { public String id; public String name; public Set<Course> courses; public Student(String id, String name) { this.id = id; this.name = name; this.courses = new HashSet<Course>(); } } package com.imooc.collection; / * 课程类 * @author Administrator * */ public class Course { public String id; public String name; public Course(String id, String name) { this.id = id ; this.name = name; } public Course() { } } 添加课程、查询课程、课程修改、课程删除: package com.imooc.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; / * 备选课程类 * @author Administrator * */ public class ListTest { / * 用于存放备选课程的List */ public List coursesToSelect; public ListTest() { this.coursesToSelect = new ArrayList(); } / * 用于往coursesToSelect中添加备选课程 */ public void testAdd() { //创建一个课程对象,并通过调用add方法,添加到备选课程List中 Course cr1 = new Course("1" , "数据结构"); coursesToSelect.add(cr1); Course temp = (Course) coursesToSelect.get(0); System.out.println("添加了课程:" + temp.id + ":" + temp.name); Course cr2 = new Course("2", "C语言"); coursesToSelect.add(0, cr2); Course temp2 = (Course) coursesToSelect.get(0); System.out.println("添加了课程:" + temp2.id + ":" + temp2.name); coursesToSelect.add(cr1); Course temp0 = (Course) coursesToSelect.get(2); System.out.println("添加了课程:" + temp.id + ":" + temp.name); //以下方法会抛出数组下标越界异常 // Course cr3 = new Course("3", "test"); // coursesToSelect.add(4, cr3); Course[] course = {new Course("3", "离散数学"), new Course("4", "汇编语言")}; coursesToSelect.addAll(Arrays.asList(course)); Course temp3 = (Course) coursesToSelect.get(2); Course temp4 = (Course) coursesToSelect.get(3); System.out.println("添加了两门课程:" + temp3.id + ":" + temp3.name + ";" + temp4.id + ":" + temp4.name); Course[] course2 = {new Course("5", "高等数学"), new Course("6", "大学英语")}; coursesToSelect.addAll(2, Arrays.asList(course2)); Course temp5 = (Course) coursesToSelect.get(2); Course temp6 = (Course) coursesToSelect.get(3); System.out.println("添加了两门课程:" + temp5.id + ":" + temp5.name + ";" + temp6.id + ":" + temp6.name); } / * 取得List中的元素的方法 * @param args */ public void testGet() { int size = coursesToSelect.size(); System.out.println("有如下课程待选:"); for(int i= 0 ; i < size; i++) { Course cr = (Course) coursesToSelect.get(i); System.out.println("课程:" + cr.id + ":" + cr.name); } } / * 通过迭代器来遍历List * @param args */ public void testIterator() { //通过集合的iterator方法,取得迭代器的实例 Iterator<Course> it = coursesToSelect.iterator(); System.out.println("有如下课程待选(通过迭代器访问):"); while(it.hasNext()) { Course cr = it.next(); System.out.println("课程:" + cr.id + ":" + cr.name); } } / * 通过for each方法访问集合元素 * @param args */ public void testForEach() { System.out.println("有如下课程待选(通过for each访问):"); for (Object obj : coursesToSelect) { Course cr = (Course) obj; System.out.println("课程:" + cr.id + ":" + cr.name); } } / * 修改List中的元素 * @param args */ public void testModify() { coursesToSelect.set(4, new Course("7", "毛概")); } / * 删除List中的元素 * @param args */ public void testRemove() { // Course cr = (Course) coursesToSelect.get(4); System.out.println("即将删除4位置和5位置上的课程!"); Course[] courses = {(Course) coursesToSelect.get(4), (Course) coursesToSelect.get(5)}; coursesToSelect.removeAll(Arrays.asList(courses)); // coursesToSelect.remove(4); System.out.println("成功删除课程!"); testForEach(); } / * 往List中添加一些奇怪的东西 * @param args */ public void testType() { System.out.println("能否往List中添加一些奇怪的东西呢!?"); coursesToSelect.add("我不是课程,我只是一个无辜的字符串!!"); } public static void main( String[] args) { ListTest lt = new ListTest(); lt.testAdd(); lt.testType(); lt.testForEach(); // lt.testGet(); // lt.testIterator(); // lt.testForEach(); // lt.testModify(); // lt.testForEach(); // lt.testRemove(); } }
泛型
应用泛型管理课程:
package com.imooc.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class SetTest { public List<Course> coursesToSelect; public SetTest() { coursesToSelect = new ArrayList<Course>(); } / * 用于往coursesToSelect中添加备选课程 */ public void testAdd() { // 创建一个课程对象,并通过调用add方法,添加到备选课程List中 Course cr1 = new Course("1", "数据结构"); coursesToSelect.add(cr1); Course temp = (Course) coursesToSelect.get(0); // System.out.println("添加了课程:" + temp.id + ":" + temp.name); Course cr2 = new Course("2", "C语言"); coursesToSelect.add(0, cr2); Course temp2 = (Course) coursesToSelect.get(0); // System.out.println("添加了课程:" + temp2.id + ":" + temp2.name); // coursesToSelect.add(cr1); // Course temp0 = (Course) coursesToSelect.get(2); // System.out.println("添加了课程:" + temp.id + ":" + temp.name); // 以下方法会抛出数组下标越界异常 // Course cr3 = new Course("3", "test"); // coursesToSelect.add(4, cr3); Course[] course = { new Course("3", "离散数学"), new Course("4", "汇编语言") }; coursesToSelect.addAll(Arrays.asList(course)); Course temp3 = (Course) coursesToSelect.get(2); Course temp4 = (Course) coursesToSelect.get(3); // System.out.println("添加了两门课程:" + temp3.id + ":" + // temp3.name + ";" + temp4.id + ":" + temp4.name); Course[] course2 = { new Course("5", "高等数学"), new Course("6", "大学英语") }; coursesToSelect.addAll(2, Arrays.asList(course2)); Course temp5 = (Course) coursesToSelect.get(2); Course temp6 = (Course) coursesToSelect.get(3); // System.out.println("添加了两门课程:" + temp5.id + ":" + // temp5.name + ";" + temp6.id + ":" + temp6.name); } / * 通过for each方法访问集合元素 * * @param args */ public void testForEach() { System.out.println("有如下课程待选(通过for each访问):"); for (Object obj : coursesToSelect) { Course cr = (Course) obj; System.out.println("课程:" + cr.id + ":" + cr.name); } } / * @param args */ public static void main(String[] args) { SetTest st = new SetTest(); st.testAdd(); st.testForEach(); // 创建一个学生对象 Student student = new Student("1", "小明"); System.out.println("欢迎学生:" + student.name + "选课!"); // 创建一个Scanner对象,用来接收从键盘输入的课程ID Scanner console = new Scanner(System.in); for (int i = 0; i < 3; i++) { System.out.println("请输入课程ID"); String courseId = console.next(); for (Course cr : st.coursesToSelect) { if (cr.id.equals(courseId)) { student.courses.add(cr); / * Set中,添加某个对象,无论添加多少次, 最终只会保留一个该对象(的引用), 并且,保留的是第一次添加的那一个 */ // student.courses.add(null); student.courses.add(cr); } } } st.testForEachForSet(student); } public void testForEachForSet(Student student) { // 打印输出,学生所选的课程! System.out.println("共选择了:" + student.courses.size() + "门课程!"); for (Course cr : student.courses) { System.out.println("选择了课程:" + cr.id + ":" + cr.name); } } }
ChildCourse 类继承 Course类:
运行结果如下:
通过Set集合管理课程:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/157996.html