源自:4-11 学生选课---通过 Set 集合管理课程

老师,为什么遍历Set集合里的元素,一直都是有序的输出呢?

package com.imooc.collection;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.Scanner;

import javax.swing.text.Style;

public class SetTest {

public List coursesToSelect;

private Scanner console;

public Student stu;

public SetTest(){

this.coursesToSelect=new ArrayList();   //初始化

this.console=new Scanner(System.in);

}

/**

* 用于往coursesToSelect中添加备选课程

*/

public void testAdd(){

//创建一个课程对象,并通过调用add方法,添加到备选课程List中

Course cr1=new Course("1","数据结构");

coursesToSelect.add(cr1);

Course temp=(Course)coursesToSelect.get(0);

//System.out.println("添加了课程:"+temp.getId()+":"+temp.getName());

Course cr2=new Course("2","C语言");

coursesToSelect.add(0, cr2);

Course temp2=(Course)coursesToSelect.get(0);

//System.out.println("添加了课程:"+temp2.getId()+":"+temp2.getName());

//证明数据可重复

//coursesToSelect.add(cr1);

//Course temp0=(Course)coursesToSelect.get(2);

//System.out.println("添加了课程:"+temp0.getId()+":"+temp0.getName());

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.getId()+":"+temp3.getName()+";"+temp4.getId()+":"+temp4.getName());

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.getId()+":"+temp5.getName()+";"+temp6.getId()+":"+temp6.getName()+"\n");

}

/**

* 通过for each方法访问集合元素

* @param args

*/

public void testForEach(){

System.out.println("\n"+"有如下课程待选(通过for each访问):");

for(Object obj : coursesToSelect){

Course cr=(Course)obj;

System.out.println("课程:"+cr.getId()+":"+cr.getName());

}

}

/**

* 测试List的contains方法

*/

public void testListContains(){

//获取备选课程序列的第0个元素

Course course=coursesToSelect.get(0);

//打印输出coursesToSelect是否包含该course对象

System.out.println("取得课程:"+course.getName());

System.out.println("备选课程中是否包含该课程:"+course.getName()+","+coursesToSelect.contains(course));//运行测试

//创建一个新课程对象,ID和名称与course完全相同

//(但它们是两个完全不同的对象,course2并不包含在序列中,所以结果为false)

//若要为true,则只需重写equals()方法即可

Course course2=new Course(course.getId(),course.getName());

System.out.println("新创建的课程:"+course2.getName());

System.out.println("备选课程中是否包含该课程:"+course2.getName()+","+coursesToSelect.contains(course2));//运行测试

//现在要求从键盘接收一个课程名称

System.out.println("输入一个课程名称:");

String name=console.next();

Course course3=new Course();

course3.setName(name);

System.out.println("备选课程中是否包含该课程:"+course3.getName()+","+coursesToSelect.contains(course3));//运行测试

if(coursesToSelect.contains(course3)){

System.out.println("课程为:"+course3.getName()+" 的索引位置为:"+coursesToSelect.indexOf(course3));

}

}

//创建学生对象并选课

public void createStudentAndSelectCourse(){

//创建一个学生对象

stu = new Student("1", "小明");

System.out.println("欢迎学生:"+stu.getName()+"来选课!");

//循环接收3次输入的数据,存到学生信息的courses中去

for(int i=0;i<3;i++){

System.out.println("请输入要选择的课程ID:");

//从键盘接收用户输入的课程ID

String courseId=console.next();

for(Course cr : coursesToSelect){

if(cr.getId().equals(courseId)){

stu.courses.add(cr);

//Set中添加某个对象,无论加多少次,

//最终只会保留一个该对象(的引用),

//并且保留的是第一次添加的那个

//stu.courses.add(cr);

}

}

}

}

/**

* 测试Set的contains方法

*/

public void testSetContains(){

System.out.println("请输入该学生已选的课程名称:");

String name=console.next();

Course course=new Course();

course.setName(name);

System.out.println("备选课程中是否包含该课程:"+course.getName()+","+stu.courses.contains(course));//运行测试

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

SetTest st=new SetTest();

st.testAdd();

st.testListContains();

st.testForEach();

//st.createStudentAndSelectCourse();

//st.testSetContains();

//st.testForEachForSet(stu);

}

/**

* 打印输出学生所选课程,证明无序

*/

public void testForEachForSet(Student stu){

System.out.println("共选择了:"+stu.courses.size()+"门课程");

for(Course cr : stu.courses){

System.out.println("选择了课程"+cr.getId()+":"+cr.getName());

}

}

}

提问者:大_神

2018-07-16 11:32

java输出set中的元素_老师,为什么遍历Set集合里的元素,一直都是有序的输出呢?...相关推荐

  1. java向数组中增加新元素_用Java中的新元素替换List的给定索引处的元素

    java向数组中增加新元素 Given a list of the integers and we have to replace it an element from specified index ...

  2. java list filter 性能,java的List中使用filter過濾出符合特定條件的元素List

    在實際開發中,經常需要把一個列表中的元素,按照特定條件過濾出來,放到一個新的列表中.本文給出了幾個例子,來描述解決這個問題的方法. 我們假設有一個書的List,需要找出其中id分別是3.6.8.9的書 ...

  3. java在程序中加入音频_在任意Java程序中播放音频

    音频文件有多种格式.Java程序能够播放WAV,AIFF,MIDI,AU和RMF格式的声音文件. 要在Java中播放音频文件,应该先为声音文件创建一个音频剪辑对象(audio clip object) ...

  4. JAVA中哈希表的使用-遍历map集合

    java中哈希表的使用第二例-即将罗马数字转换为整数 代码: class Solution { public int romanToInt(String s) { HashMap<Charact ...

  5. java调用项目中的文件_详解eclipse项目中.classpath文件的使用

    1 前言 在使用eclipse或者myeclipse进行java项目开发的时候,每个project(工程)下面都会有一个.classpath文件,那么这个文件究竟有什么作用? 2 作用 .classp ...

  6. java删除文件中的一行_在Linux中使用java和javac命令编译运行java文件

    Linux中java和javac使用及注意事项 注意!!!: 前提配置好java的环境变量. 如下图: 配置文件 java命令正常 javac命令正常 关于如何配置java环境变量,请详见: 第一篇: ...

  7. java改写weka中的算法_用Eclipse在Weka中嵌入新算法

    本文介绍添加一个新算法到Weka集成环境中的过程,并能在GUI中运行并显示其结果.想做到这一点有两种方法,一是用ANT命令生成新的weka.jar(稍后写教程),二是用IDE(Eclipse或NetB ...

  8. c语言如何删除数组中的某一个元素_数据结构之线性表高效删除重复元素

    刚刚学完数据结构之线性表中关于顺序表和单链表的知识,我们知道顺序表中存储数据的结构是一个数组,对于数组来说,在尾部插入.删除元素是比较高效的,但是如果在中间或者开头插入.删除元素,就会涉及数据的搬移, ...

  9. assembly 输出ab中所有数_罗克韦尔(AB)PLC控制器选型(2)-CompactLogix 5370

    前面的文章我们介绍过AB的大型PLC--ControlLogix的选型(参考:罗克韦尔(AB)PLC控制器怎样选型(1)). 今天这篇文章,我们来认识下AB的中型PLC产品--CompactLogix ...

最新文章

  1. JAVA第二次验证设计性实验报告
  2. 冲杯咖啡,谈谈计算机cpu
  3. jpa oracle mysql,oracle+jpa和mysql+mybatis的混合多数据源配置例子
  4. html链接txt文件,怎么在TXT文件中建立超链接
  5. c语言生成一个大素数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  6. python import MySQLdb 解决报错 Error:Reason: image not found
  7. C#中的矩阵乘法——对图像应用变换
  8. pacbio 原始下机数据h5 文件简介
  9. Android ConstraintLayout 最新使用小结
  10. 织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上绝对路径教程...
  11. 物理搬砖问题_人物专访|从“搬砖烧炉工”到MIT物理PhD, 很普通、很坚持、很热爱...
  12. *第三周*数据结构实践项目一【顺序表的基本运算】
  13. Python异步高并发批量读取URL链接
  14. 庆祝:黑客x档案官方二级域名转向
  15. JN5169 基于 JN-AN-1217 组网点灯
  16. 自我总结:找工作面试时注意事项
  17. 使用mac制作linux启动盘与恢复U盘(dd命令制作U盘启动盘后怎么恢复U盘)
  18. java中的 输入 方法
  19. 彻底征服 React.js + Flux + Redux【讲师辅导】-曾亮-专题视频课程
  20. android qq授权申请appkey,如需在APP中使用腾讯QQ登陆,需提前申请获取腾讯QQ的APPKEY和APPSecret。...

热门文章

  1. 模拟——乒乓球(洛谷 P1042)
  2. PAT乙级(1013 数素数)
  3. PAT乙级(1007 素数对猜想)
  4. mysql5.6忘记立马_MySQL 5.7 安装完成后,立即要调整的性能选项
  5. Oracle 19c 新特性:自动化索引 Automatic indexing 实践
  6. 要想下班早,微服务架构少不了
  7. 只需6步,教你从零开发一个签到小程序
  8. 带你掌握4种Python 排序算法
  9. 我是一个请求,我该何去何从
  10. 解读8大场景下Kunpeng BoostKit 使能套件的最佳能力和实践