mooc_java 集合框架上 学生所选课程
用一个集合Set存放学生所选课程
接口不能实例化,所以用其实现类进行实例化
set接口不能实例化,通过HashSet这个实现类来进行实例化,需要导入包
this.courses=new HashSet();
list接口 ArrayList实现类
this.courseToSelect=new ArrayList(); //才能保证容器能被实例化。
ArrayList.get(int index) 一定要注意,a使用dd()或者是addAll()方法插入的元素一律会变成Object类型,那么使用get()方法取出时也将是Object类型的,这是接受取出的元素时,要做相应的类型强转,具体见地理程序。
ArrayList.add(int index)在指定位置插入一个元素,这个指定的位置一定要小于当前序列表的长度,当等于其长度时,则在该数组表的末尾插入
ArrayList.addAll(int index, List L) 在指定位置插入一个序列表的
ArrayList.addAll(List L) 在已有ArrayList的末尾插入一个list序列
把数组转换为ArrayList:
1.Element[] a = {new 对象1,new 对象2....}//创建
2.main 方法所在类.addAll(Array.asList(a));//添加
3.每个数组元素依次转换为指定对象类型//转换
List类的addAll removeAll是集合的操作,使用Arrays.asList(array)方法
向List中添加元素的几种方法:
新建List类
public List courseToSelect;
初始化List类
public ListTest()
{
this.courseToSelect=new ArrayList();
}
向List中添加数据
method_1
courseToSelect.add(对象1);
method_2
courseToSelect.add(位置,对象2);
method_3
courseToSelect.addAll(Arrays.asList(数组_对象3));
method_4
courseToSelect.addAll(位置,Arrays.asList(数组_对象4));
获取
Course temp=(Course)courseToSelect.get(位置);
addAll 和 removeAll都是对集合操作,因此都需要把数组转化成集合。
课程查询
/*
* 用迭代器遍历list
* @param args
*/
public void testIterator()
{
Iterator it=courseToSelect.iterator();
while(it.hasNext())
{
Course cr=(Course)it.next();
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
/*
* 用for each方法访问集合元素
*/
public void testForEach()
{
for(Object obj:courseToSelect)
{
Course cr=(Course)obj;
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
public static void main(String[] args)
{
ListTest It=new ListTest();
It.testAdd();
It.testGet();
It.testIterator();
It.testForEach();
}
课程修改
public void testModify()
{
courseToSelect.set(4, new Course("6", "毛概"));
}
课程删除
public void testRemove()
{
Course cr=(Course)courseToSelect.get(4);
courseToSelect.remove(cr);
//删除4,5位置上的元素
Course[] courses={(Course)courseToSelect.get(4),(Course)courseToSelect.get(5)};
courseToSelect.removeAll(Arrays.asList(courses));
//转化成集合
testForEach();
}
应用泛型管理课程
集合中的元素,可以是任意类型的对象(对象的引用);泛型,用来存放特定类型元素的集合,会在编译期间进行类型检查,,可以直接按指定类型获取集合元素
泛型集合中只能添加泛型及其子类对象
泛型不能是基本类型,必须是使用其对应的包装类
格式:
List<Integer> a = new ArrayList<Integer>();
a.add(1);
System.out.println(""+a.get(0));
子类继承父类时,会默认构建一个无参的构造器,但是如果父类中没有无参的构造器就会报错,所以需要在父类中定义一个无参的构造方法。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
public String id;
public String name;
//实际应该private,然后用get,set
//含参构造器
public Course(String id,String name){
this.id=id;
this.name=name;
}
Student.java
public String id;
public String name;
public Set courses;
//引入Set包
提供id,name就可以构造出学生
构造器
public Student(String id,String name){
this.id=id;
this.name=name;
this.courses=new HashSet();
}
由于Set接口不能实例化所以用HashSet对courses进行实例化
用list容器存放备选课程
ListTest.java
public class ListTest{
public List coursesToSelect;//引入java.util下的List包//List类型的属性
public ListTest(){//构造方法用于初始化coursesToSelect属性
this.coursesToSelect=new ArrayList();//引入ArrayList包
}
//往容器里添加课程,调用List里的方法
public void testAdd(){
Course cr1=new Course("1","数据结构");//调用了Course的构造器
CourseToSelect.add(cr1);
//Course temp=coursesToSelect.get(0);
//报错:对象存入集合会变成object类型,取出时需要进行类型转换
Course temp=(Course)courseToSelect.get(0);
System.out.println(temp.id+temp.name);
//todoList中重载的另一种方法,添加新元素,还可以指定位置
}
public static void main(){
ListTest lt=new ListTest();
lt.testAdd();//运行java运行方式
}
}
//todo
Course cr2=new Course("2","C语言");
coursesToSelect.add(0,cr2);
Course temp2=(Course)courseToSelect.get(0);
System.out.println(temp2.id+temp2.name);
//List中的元素是可重复的:
coursesToSelect.add(cr1);
Course temp0=(Course)coursesToSelect.get(2);
System.out.println(temp0.id+temp0.name);
//Course cr3=new Course("2","C++");
//coursesToSelect.add(4,cr3);
//异常:下标越界
Course[] course={new Course("3","离散"),new Course("4","汇编")};
coursesToSelect.addAll(arrays.asList(course));//Collection 的实例//把数组转变为List
Course temp3=(Course)courseToSelect.get(2);
Course temp4=(Course)courseToSelect.get(3);
System.out.println(temp3.id+temp3.name);
Course[] course2={new Course("5","高数"),new Course("6","英语")};
coursesToSelect.addAll(2,arrays.asList(course2));
Course temp5=(Course)courseToSelect.get(2);
Course temp6=(Course)courseToSelect.get(3);
}
public void testGet(){
int size= coursesToSelect.size(); //通过size()取得list的长度
System.out.println("待选课程:");
for(int i=0;i<size;i++){
Course cr=(Course)coursesToSelect.get(i);//取得相应位置上的元素
System.out.println("课程:"+cr.id+":"cr.name);
}
}
在main中调用lt.testGet();
List中的元素是可重复的:......
//通过迭代器遍历List//通过集合的iterator方法,取得迭代器的实例
public void testIterator(){//Iterator接口//导入包
Iterator it=coursesToSelect.iterator();
System.out.println("用迭代器遍历出的待选课程:");
while(it.hasNext){//如果还有元素为真
Course cr=(Course)it.next();//取元素
System.out.println("课程:"+cr.id+":"cr.name);
}
}
在main中调用lt.testIterator();
迭代器依赖于集合而存在
//通过for each()访问集合元素
public void testForEach(){
System.out.println("用for each遍历出的待选课程:");
for(Object obj:coursesToSelect){
System.out.println("课程:"+cr.id+":"cr.name);
}
}
课程修改
public void testModify(){
coursesToSlect.set(4,new Course("7","毛概"));
}
在main中调用 It.testModify();It.testForEach();
课程删除
public void testRemove()
{
//Course cr=(Course)coursesToSelect.get(4);//取得4位置上的元素
//System.out.println("我是将要被删除的课程:"+cr.id+cr.name);
//coursesToSelect.remove(cr);
//System.out.println("已删除课程"+cr);
coursesToSelect.remove(4);
testForEach();
//删除4,5位置上的元素
Course[] courses={(Course)coursesToSelect.get(4),(Course)coursesToSelect.get(5)};
coursesToSelect.removeAll(Arrays.asList(courses));//转化成集合
testForEach();
}
应用泛型管理课程
List里不能加不一样的类型对象
集合中的元素可以是任意类型的对象(对象的引用)
泛型:规定了某个集合只可以存放特定类型的对象,会在编译期间进行检查,可以直接按指定类型获取集合元素
新建TestGeneric.java
带有泛型的List写法:
/**
* 用于存放备选课程的List
*/
public class ListTest {
public List coursesToSelect;
public ListTest()
{
this.coursesToSelect=new ArrayList();
}
/**
* 在courseToSelect容器中添加课程
*/
public void testAdd() {
//创建一个课程对象,利用add方法
Course cr1=new Course("1", "数据结构");//课程对象的实例
coursesToSelect.add(cr1);
//Course temp=courseToSelect.get(0);
Course temp=(Course)coursesToSelect.get(0);
//对象存入集合都会变为object类型,取出时要作类型转换
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);
//List中的元素是可重复的:
coursesToSelect.add(cr1);
Course temp0 =(Course)coursesToSelect.get(2);
System.out.println(temp0.id+temp0.name);
//Course cr3=new Course("3", "C");
//courseToSelect.add(4, cr3);
//报异常数组下标越界 add是在可以访问的位置上插入
//创建课程数组添加两个元素
Course[] course ={new Course("3", "离散数学"),new Course("4", "汇编语言")};
coursesToSelect.addAll(Arrays.asList(course));
//addAll是collection
Course temp3=(Course)coursesToSelect.get(2);
Course temp4=(Course)coursesToSelect.get(3);
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);
}
/**
* 取得list中元素的方法
*/
public void testGet()
{
System.out.println("可选课程:");
for(int i=0;i<coursesToSelect.size();i++)
{
Course cr=(Course)coursesToSelect.get(i);
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
/**
* 用迭代器遍历list
* @param args
*/
public void testIterator()
{
Iterator it=coursesToSelect.iterator();
System.out.println("用迭代器遍历出的待选课程:");
while(it.hasNext())
{
Course cr=(Course)it.next();
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
/**
* 用for each方法访问集合元素
*/
public void testForEach()
{
System.out.println("用for each遍历出的待选课程:");
for(Object obj:coursesToSelect)
{
Course cr=(Course)obj;
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
/**
* 修改list中的元素
*/
public void testModify()
{
coursesToSelect.set(4, new Course("7", "毛概"));
}
/**
* 删除List中的元素
* @param args
*/
public void testRemove()
{
//Course cr=(Course)coursesToSelect.get(4);//取得4位置上的元素
//System.out.println("我是将要被删除的课程:"+cr.id+cr.name);
//coursesToSelect.remove(cr);
//System.out.println("已删除课程"+cr);
coursesToSelect.remove(4);
testForEach();
//删除4,5位置上的元素
Course[] courses={(Course)coursesToSelect.get(4),(Course)coursesToSelect.get(5)};
coursesToSelect.removeAll(Arrays.asList(courses));//转化成集合
testForEach();
}
public static void main(String[] args)
{
ListTest It=new ListTest();
It.testAdd();
It.testGet();
It.testIterator();
It.testForEach();
It.testModify();It.testForEach();
It.testRemove();
}
}
泛型的子类型对象实例
新建ChildCourse.java继承Course
//报错,Course中有含参构造器,编译器就不会为其添加隐式构造器,而子类中必须调用父类的隐式构造器,所以在Course中添加无参构造器public Course(){}
TestGeneric中测试泛型集合介意添加泛型的子类型的对象实例
public void testChild(){
ChildCourse ccr=new ChildCourse();
ccr.id="3";
ccr.name="我是子类型的课程对象实例";
courses.add(ccr);
}
在main中调用tg.testChild(); tg.testForEach();
泛型集合中的限定类型不能使用基本数据类型,可通过使用包装类限定允许存入的基本数据类型
例如:int~Integer long~Long boolean~Boolean
public void testBasicType()
{
//List<int> list =new ArrayList<int>();
List<Integer> list =new ArrayList<Integer>();
list.add(1);//被强制包装成Integer类型
System.out.println("基本类型必须使用包装类作为泛型"+list.get(0));
}
通过Set集合管理学生课程
不能修改指定位置的元素(无序 )
Set类型的属性:courses
在Student.java中修改public Set courses;
为public Set<Course> courses;
构造器中加泛型this.courses=new HashSet<Course>();
新建SetTest.java
public List<Course> coursesToSelect;
public SetTest()
{
coursesToSelect=new ArrayList<Course>();
}
public void testAdd() {
Course cr1=new Course("1", "数据结构");//课程对象的实例
coursesToSelect.add(cr1);
Course temp=(Course)coursesToSelect.get(0);
Course cr2=new Course("2", "C++");
coursesToSelect.add(0, cr2);
Course temp2=(Course)coursesToSelect.get(0);
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);
}
public void testForEach()
{
for(Object obj:coursesToSelect)
{
Course cr=(Course)obj;
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
public static void main(String[] args){
SetTest st=new SetTest();
st.testAdd();
st.testForEach();
//学生对象
Student s=new Student("1","小米");
System.out.println("请选课"+s.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)){
s.courses.add(cr);
//Set保留最后一次添加的那个,可以添加null
}
}
}
st.testForEach(s);
}
public void testForEach(Student s){
for(Course cr:s.courses){
System.out.println("已选课程:"+cr.id+":"+cr.name);
}
}
mooc_java 集合框架上 学生所选课程的更多相关文章
- mooc_java 集合框架中 学生所选课程2Map&HashMap
Map&HashMapMap提供映射关系,元素以键值对形式存储,Map的键值对一Entry类型的对象实例形式存在,key值不能重复,value可以键最多能映射到一个值,支持泛型 Map< ...
- Java 之集合框架 上(9)
Java 中的集合框架 如果一个类中存在很多相同类型的属性. 例如:学生类 学生可以选课,因此存在很多课程类型的属性.但是每个学生选择的课程的种类和数量是不一样的. 如果将每一个课程类型的属性都列到课 ...
- mooc_java 集合框架下
1.判断List中课程是否存在 /** * 测试List的contains方法 * @param args */ public void testListContains(){ Course cour ...
- Day03:日期操作 / 集合框架(上)
日期操作 Java中的时间 · Java中的时间使用标准类库的Date类表示,是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点: · 固定的时间点叫纪元(epoch),是U ...
- 集合框架(上):学生选课(collection)
利用集合存储课程信息: 1.Course类 package com.collection; public class Course { public String id; public String ...
- 浅入深出之Java集合框架(上)
Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...
- Java中的集合框架(上)
Java中的集合框架概述 集合的概念: Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象. 集合的作用: 1.在类的内部,对数据进行组织: 2.简单的快速的搜索大数据量的 ...
- Java-Runoob-高级课程:Java 集合框架
ylbtech-Java-Runoob-高级课程:Java 集合框架 1.返回顶部 1. Java 集合框架 早在 Java 2 中之前,Java 就提供了特设类.比如:Dictionary, Vec ...
- 【深入理解Java集合框架】红黑树讲解(上)
来源:史上最清晰的红黑树讲解(上) - CarpenterLee 作者:CarpenterLee(转载已获得作者许可,如需转载请与原作者联系) 文中所有图片点击之后均可查看大图! 史上最清晰的红黑树讲 ...
随机推荐
- JNI开发(2)——开发实战
JNI开发(1)--概述.环境搭建.必要知识点 JNI开发(2)--开发实战 本篇是重头戏:JNI实战开发.假设你对于 JNI.NDK 还没概念的话 那么观看本篇 也是没有太大难度的 ,哈哈哈哈! ! ...
- 移植MonkeyRunner的图片对照和获取子图功能的实现-UiAutomator/Robotium篇
依据前一篇文章<移植MonkeyRunner的图片对照和获取子图功能的实现-Appium篇>所述,由于Appium和MonkeyRunner有一个共同点--代码控制流程都是在client实 ...
- .net 网站登录
如何实现,按回车键,自动登录,在相应控件上添加onkeypress事件 function CheckCodePress(e){ var e = e||window.event if (e.keyCod ...
- SharePoint 2013 和 SharePoint 2010 功能对比
微软的网站找东西太麻烦了,在这记录一下. 从 SharePoint 2010 更改为 SharePoint 2013 http://technet.microsoft.com/zh-cn/librar ...
- iTunes备份注意
记住: 如果你有重要的信息在iTunes中无备份的话.那么开始不要同步了. 退出时,最好备份后在退出.
- 详细解析用Squid实现反向代理的方法
代理服务器是使 用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受 外部网主机的攻击.但是,如果想让互联网 ...
- keras----resnet-vgg-xception-inception
来源: https://www.pyimagesearch.com/2017/03/20/imagenet-vggnet-resnet-inception-xception-keras/ classi ...
- HDFS源码分析数据块之CorruptReplicasMap
CorruptReplicasMap用于存储文件系统中所有损坏数据块的信息.仅当它的所有副本损坏时一个数据块才被认定为损坏.当汇报数据块的副本时,我们隐藏所有损坏副本.一旦一个数据块被发现完好副本达到 ...
- git for windows 无法结束node进程(windows下杀进程)
问题 windows 系统下,如果用CMD命令行启动node服务,Ctrl + C 即可结束命令 git bash 用起来比命令行方便,但是Ctrl + C 并不会结束node服务,再次启动会报如下错 ...
- leetCode 88.Merge Sorted Array (合并排序数组) 解题思路和方法
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...