集合框架(上):学生选课(collection)
利用集合存储课程信息:
1.Course类
package com.collection;
public class Course {
public String id;
public String name;
public Course(String id,String name)
{
this.id=id;
this.name=name;
}
}
2.ListTest类
package com.collection; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List; /**
* 备选课程类
*/ public class ListTest {
//List用于存放备选课程
public List CourseToSelect;
public ListTest(){
this.CourseToSelect = new ArrayList();
}
//用于往CourseToSelect添加备选课程
public void TestAdd(){
//创建一个课程对象,并通过调用add方法,添加到备选课程List中
Course c1 = new Course("1","数据结构");
CourseToSelect.add(c1);
Course temp = (Course) CourseToSelect.get(0);
System.out.println("添加了课程:"+temp.id+"_"+temp.name); Course c2 = new Course("2","c语言");
CourseToSelect.add(0, c2);
Course temp2 = (Course) CourseToSelect.get(0);
System.out.println("添加了课程:"+temp2.id+"_"+temp2.name); Course[] course = {new Course("3","离散数学"),new Course("4","汇编语言")};
CourseToSelect.addAll(Arrays.asList(course));
Course temp3 = (Course) CourseToSelect.get(2);
Course temp4 = (Course) CourseToSelect.get(3);
System.out.println("添加了两门课程:"+temp3.id+"_"+temp3.name+";"+temp4.id+"_"+temp4.name); CourseToSelect.add(c1);
Course temp0 = (Course) CourseToSelect.get(0);
System.out.println("添加了课程:"+temp0.id+"_"+temp0.name); Course[] course2 = {new Course("5","高等数学"),new Course("6","大学英语")};
CourseToSelect.addAll(2, Arrays.asList(course2));
Course temp5 = (Course) CourseToSelect.get(2);
Course temp6 = (Course) CourseToSelect.get(3);
System.out.println("添加了两门课程:"+temp5.id+"_"+temp5.name+";"+temp6.id+"_"+temp6.name); }
//取得List中元素的方法
public void testGet(){
int size = CourseToSelect.size();
System.out.println("有如下课程待选:");
for(int i = 0;i<size;i++)
{
Course cr = (Course) CourseToSelect.get(i);
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
//通过迭代器遍历List中的元素
public void testIterator(){
//通过集合的iterator方法,取得迭代器的实例;
Iterator it = CourseToSelect.iterator();
System.out.println("有如下课程待选(通过迭代器取得):");
while(it.hasNext()){
Course cr2 = (Course) it.next();
System.out.println("课程:"+cr2.id+":"+cr2.name);
} }
//通过for each遍历list中的元素
public void testForEach(){
System.out.println("有如下课程待选(通过for each取得):");
for(Object obj:CourseToSelect){
Course cr = (Course) obj;
System.out.println("课程:"+cr.id+":"+cr.name); } } //修改List中的元素
public void testModify(){
CourseToSelect.set(6, new Course("7","毛概")); } //删除List中的元素
public void testRemove(){
/*Course cr = (Course) CourseToSelect.get(6);
System.out.println("课程:"+cr.id+":"+cr.name+"我即将被删除");
CourseToSelect.remove(cr); //删除具体的元素*/
//CourseToSelect.remove(4); //删除索引4位置上的元素
Course[] courses = {(Course)CourseToSelect.get(4),(Course)CourseToSelect.get(5)};
CourseToSelect.removeAll(Arrays.asList(courses));
System.out.println("成功被删除");
testForEach();
} public static void main(String[] args){
ListTest lt = new ListTest();
lt.TestAdd();
lt.testGet();
lt.testIterator();
lt.testForEach();
lt.testModify();
lt.testForEach();
lt.testRemove();
} }
3.testGeneric类
package com.collection; import java.util.ArrayList;
import java.util.List; public class TestGeneric { /**
* @param args
*/
//带有泛型List--course的类型属性
public List<Course> courses; public TestGeneric(){
this.courses=new ArrayList<Course>();
} //测试添加
public void testAdd(){
Course cr1 = new Course("1","大学语文");
courses.add(cr1);
courses.add("平常的字符串");
}
public static void main(String[] args) {
// TODO 自动生成的方法存根 } }
courses.add("平常的字符串") 编译器报错,因为泛型对规定了类型必须是course类型的元素

泛型例子
1.TestGeneric类
package com.collection; import java.util.ArrayList;
import java.util.List; public class TestGeneric { /**
* @param args
*/
//带有泛型List--course的类型属性
public List<Course> courses; public TestGeneric(){
this.courses=new ArrayList<Course>();
} //测试添加
public void testAdd(){
Course cr1 = new Course("1","大学语文");
courses.add(cr1);
//泛型集合中,不能添加泛型规定的类型以及子类型以外的对象,否则编译器报错
//courses.add("平常的字符串");
Course cr2 = new Course("2","java基础");
courses.add(cr2); } //泛型集合可以添加泛型子类型的对象实例
public void testChild(){
ChildCourse ccr = new ChildCourse();
ccr.id="3";
ccr.name="我是子类型的课程对象实例 ";
courses.add(ccr);
} //泛型不能使用基本类型
public void testBasicType(){
List<Integer> list = new ArrayList<Integer>();
list.add(1);
System.out.println("基本类型必须使用包装类作为泛型~~"+list.get(0));
} //测试方法
public void testForEach(){
for(Course cr:courses){
System.out.println(cr.id+":"+cr.name);
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
TestGeneric tg = new TestGeneric();
tg.testAdd();
tg.testForEach();
tg.testChild();
tg.testForEach();
tg.testBasicType(); } }
2.ChildCourse继承Course类(在建立类中选择超类Course中即可)
package com.collection;
public class ChildCourse extends Course {
}
建立继承类只是为了验证泛型中可以添加子类型的对象实例
学生手动选课,显示学生的选课信息
1.student类
package com.collection; import java.util.HashSet;
import java.util.Set; /**
* @学生类
*
*/ 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>();
} }
2.SetTest类
package com.collection; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner; public class SetTest { /**
* @param args
*/ public List<Course> CourseToSelect;
public SetTest(){
CourseToSelect = new ArrayList<Course>();
} //添加元素
public void TestAdd(){
//创建一个课程对象,并通过调用add方法,添加到备选课程List中
Course c1 = new Course("1","数据结构");
CourseToSelect.add(c1);
Course temp = (Course) CourseToSelect.get(0);
//System.out.println("添加了课程:"+temp.id+"_"+temp.name); Course c2 = new Course("2","c语言");
CourseToSelect.add(0, c2);
Course temp2 = (Course) CourseToSelect.get(0);
//System.out.println("添加了课程:"+temp2.id+"_"+temp2.name); Course[] course = {new Course("3","离散数学"),new Course("4","汇编语言")};
CourseToSelect.addAll(Arrays.asList(course));
Course temp3 = (Course) CourseToSelect.get(2);
Course temp4 = (Course) CourseToSelect.get(3);
//System.out.println("添加了两门课程:"+temp3.id+"_"+temp3.name+";"+temp4.id+"_"+temp4.name); //CourseToSelect.add(c1);
//Course temp0 = (Course) CourseToSelect.get(0);
//System.out.println("添加了课程:"+temp0.id+"_"+temp0.name); Course[] course2 = {new Course("5","高等数学"),new Course("6","大学英语")};
CourseToSelect.addAll(2, Arrays.asList(course2));
Course temp5 = (Course) CourseToSelect.get(2);
Course temp6 = (Course) CourseToSelect.get(3);
//System.out.println("添加了两门课程:"+temp5.id+"_"+temp5.name+";"+temp6.id+"_"+temp6.name); } //测试For Each打印输出
public void testForEach(){
System.out.println("有如下课程待选(通过for each取得):");
for(Object obj:CourseToSelect){
Course cr = (Course) obj;
System.out.println("课程:"+cr.id+":"+cr.name); } }
public static void main(String[] args) {
// TODO 自动生成的方法存根
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.CourseToSelect) {
if(cr.id.equals(courseId)){
student.courses.add(cr);
}
}
}
st.testForEachForSet(student); } // 打印输出,学生所选的课程
public void testForEachForSet(Student student){
for (Course cr : student.courses) {
System.out.println("选择了课程:"+cr.id+":"+cr.name); }
} }

注:Set中,添加某个对象,无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的事第一次添加的那个。

添加了两次课程1 但是最后的结果就是选择了两门课程。
集合框架(上):学生选课(collection)的更多相关文章
- mooc_java 集合框架上 学生所选课程
用一个集合Set存放学生所选课程接口不能实例化,所以用其实现类进行实例化 set接口不能实例化,通过HashSet这个实现类来进行实例化,需要导入包this.courses=new HashSet() ...
- JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用
JAVA之旅(十八)--基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用 JAVA把完事万物都定义为对象,而我们想使用数据 ...
- 基于SSH框架的学生选课质量属性分析
系统:学生选课系统 框架:SSH(Struts2+Spring+Hibernate) 我做的是基于SSH框架的学生选课系统.学生选课系统的特性:①系统响应时间短,能够快速调出课程数据供学生选课提交.② ...
- Java 之集合框架 上(9)
Java 中的集合框架 如果一个类中存在很多相同类型的属性. 例如:学生类 学生可以选课,因此存在很多课程类型的属性.但是每个学生选择的课程的种类和数量是不一样的. 如果将每一个课程类型的属性都列到课 ...
- 集合框架(JCF/Java Collection Framework)
集合的特点:1.数据的类型可以不同2.集合长度可变3.空间不固定集合也是对象,用于检索,存储以及传输对象集合框架的组成Collection接口和Map接口 Collection是Set接口和List接 ...
- 集合框架学习之Guava Collection
开源工具包: Guava : Google Collection Apache:Commons Collecton 1.1 Google Collections Guava:google的工程师利用传 ...
- Java集合框架(一)—— Collection、Iterator和Foreach的用法
1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...
- Java学习关于集合框架的基础接口--Collection接口
集合框架(Collection Framework)是Java最强大的子系统之一,位于java.util 包中.集合框架是一个复杂的接口与和类层次,提供了管理对象组的最新技术.Java集合框架标准 ...
- 初识Java集合框架(Iterator、Collection、Map)
1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List ...
- Java集合框架介绍。Java Collection Frameworks = JCF
Java集合框架 = Java Collection Frameworks = JCF . 为了方便理解,我画了一张思维脑图.
随机推荐
- 孤荷凌寒自学python第十八天python变量的作用范围
孤荷凌寒自学python第十八天python函数的形参与变量的范围 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.在python的函数中各种不同的形式参数在定义的先后顺序上有规定: 必须 ...
- 1099 Build A Binary Search Tree (30 分)(查找二叉树)
还是中序遍历建树 #include<bits/stdc++.h> using namespace std; ; struct node { int data; int L,R; }s[N] ...
- ACM基础算法入门及题目列表
对于刚进入大学的计算机类同学来说,算法与程序设计竞赛算是不错的选择,因为我们每天都在解决问题,锻炼着解决问题的能力. 这里以TZOJ题目为例,如果为其他平台题目我会标注出来,同时我的主页也欢迎大家去访 ...
- [洛谷P1792][国家集训队]种树
题目大意:给出由$n$个数组成的环,取某个数就可以得到它的分数,相邻的两个数不能同时取.问取$m$个数可以得到的最大分数. 题解:建一个大根堆,贪心取,每个点记录前驱后继,取一个点就把前驱后继设成不能 ...
- [poj] 2074 Line of Sight || 直线相交求交点
原题 给出一个房子(线段)的端点坐标,和一条路的两端坐标,给出一些障碍物(线段)的两端坐标.问在路上能看到完整房子的最大连续长度是多长. 将障碍物按左端点坐标排序,然后用房子的右端与障碍物的左端连线, ...
- BZOJ3594 [Scoi2014]方伯伯的玉米田 【树状数组优化dp】
题目链接 BZOJ3594 题解 dp难题总是想不出来,, 首先要观察到一个很重要的性质,就是每次拔高一定是拔一段后缀 因为如果单独只拔前段的话,后面与前面的高度差距大了,不优反劣 然后很显然可以设出 ...
- 通过VS2010性能分析来查找代码中那些地方最损耗资源
在编写完成一个程序后,大家都比较关心程序的性能如何,想把程序优化得更好.很多时候凭个人直觉来优化程序是件非常不靠普的事情,即使你是一个优秀的开人员也很难准确地判断程序中那些出现问题.VS2010提供了 ...
- ss安装教程
https://teddysun.com/342.html 加速 wget –no-check-certificate https://github.com/teddysun/across/raw/m ...
- javascript 中 click 和onclick有什么区别呢
<script type="text/javascript"> $(function(){ $("#btn4").click(function(){ ...
- python 使用urllib2下载文件
#! usr/bin/python #coding=utf-8 import urllib2 fp = open('test', 'wb') req = urllib2.urlopen('http:/ ...