Java中Set集合的使用
2015-09-24 21:06
633 查看
除了List之外,Set集合接口也经常使用,Set接口中存放的元素是无序的并且是不可重复的,因此被称为数据集;
Set接口因为是无序的,所以没有提供像List一样的set方法来修改元素,查找,添加、删除是没问题的
下面利用Set来演示一下学生选课的简单示例:
课程类,Course.java
学生类,包括学号、属性、所选课程(利用Set集合存放),Student.java
同样利用了泛型,规定了Set集合存放学生所选的课程属性的类型
操作Set集合的类,SetTest.java
上面的程序就可以实现选课的简单功能,首先初始化备选课程放入List中,然后进行输入比对,存入学生类中Set中,然后利用foreach遍历出Set中的结果,实现的选课内容的输出,效果如下:
![](http://images2015.cnblogs.com/blog/734555/201509/734555-20150924210039225-863935316.jpg)
Set接口使用和List基本一致,显著特点就是Set中的元素无序并且不可重复,需要注意的地方就是,例子中对对象进行了重复添加,但是没有任何作用,重复添加多个相同对象时,Set中只保留一个,另外添加null空指针也是可以的;Set中元素因为其无序性,所以不能用get方法来查找,只能通过foreach或者iterator方法遍历,并且根据结果可以看出,每次输出结果顺序也是不一样的
Set接口因为是无序的,所以没有提供像List一样的set方法来修改元素,查找,添加、删除是没问题的
下面利用Set来演示一下学生选课的简单示例:
课程类,Course.java
/* * 课程类,规定课程结构,用于向集合中传入此类型的元素 */ public class Course { public String id; public String name; public Course(String id,String name){ //含参构造方法 this.id = id; this.name = name; } public Course(){ //无参构造器,为了子类初始化隐式构造方法 } }
学生类,包括学号、属性、所选课程(利用Set集合存放),Student.java
import java.util.HashSet; import java.util.Set; /* * 学生类 */ public class Student { public String id; public String name; public Set<Course> courses; //定义Set类型的集合用于存放所选课程 public Student(String id,String name){ this.id = id; this.name = name; this.courses = new HashSet<Course>(); //通过HashSet方法实例化Set类型的引用 } }
同样利用了泛型,规定了Set集合存放学生所选的课程属性的类型
操作Set集合的类,SetTest.java
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(){ this.coursesToSelect = new ArrayList<Course>(); } public void testAdd(){ Course cr1 = new Course("1","数据结构"); coursesToSelect.add(cr1); //添加属性到List中,位置0 Course cr2 = new Course("2","C语言"); coursesToSelect.add(1,cr2); Course[] course = {new Course("3","离散数学"),new Course("4","汇编语言")}; //创建一个课程类数组,存放多个对象 coursesToSelect.addAll(Arrays.asList(course)); //把数组转成List传递到courseToSelect属性中 Course[] course2 = {new Course("5","高等数学"),new Course("6","算法分析")}; coursesToSelect.addAll(4,Arrays.asList(course2)); } /* * 遍历List中的元素 */ public void testForeach(){ System.out.println("所有课程:"); for(Course cr : this.coursesToSelect){ System.out.println("课程:" + cr.id + ":" + cr.name); } } public static void main(String[] args){ SetTest st = new SetTest(); st.testAdd(); st.testForeach(); //创建学生对象 Student stu = new Student("201201100838","小颖"); System.out.println("欢迎你!" + stu.name + " 学号:" + stu.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)){ stu.courses.add(cr); //添加所选课程 //重复添加不生效,相当于没添加,多个相同对象引用只保留一个 stu.courses.add(cr); //stu.courses.add(null); //传入空值也是可以的 } } } console.close(); //关闭输入 int num = stu.courses.size(); System.out.println("共选了" + num + "门课程,列表如下:"); st.SetForeach(stu); } /* * 遍历Set中的元素只能用foreach方法或者迭代器方法,不能用get方法,因为Set中元素排列是无序的,不可能根据索引查询 * 并且最终每次输出也是无序的 */ public void SetForeach(Student stu){ for(Course cr:stu.courses){ System.out.println(cr.id + ":" + cr.name); } } }
上面的程序就可以实现选课的简单功能,首先初始化备选课程放入List中,然后进行输入比对,存入学生类中Set中,然后利用foreach遍历出Set中的结果,实现的选课内容的输出,效果如下:
![](http://images2015.cnblogs.com/blog/734555/201509/734555-20150924210039225-863935316.jpg)
Set接口使用和List基本一致,显著特点就是Set中的元素无序并且不可重复,需要注意的地方就是,例子中对对象进行了重复添加,但是没有任何作用,重复添加多个相同对象时,Set中只保留一个,另外添加null空指针也是可以的;Set中元素因为其无序性,所以不能用get方法来查找,只能通过foreach或者iterator方法遍历,并且根据结果可以看出,每次输出结果顺序也是不一样的
相关文章推荐
- struts2 使用Maven搭建Struts2框架的开发环境
- Java虚拟机4:内存溢出
- Java基础知识强化70:正则表达式之引入案例(QQ号码校验)
- java交换两个数
- 多线程学习之线程阻塞机制
- [leetcode-283]Move Zeroes(java)
- 安装APK的错误码(PackageManager.java)
- Java - 强引用、弱引用、软引用、虚引用
- Java的运行时数据存储机制
- Java的运行时数据存储机制
- java.lang.IllegalThreadStateException异常原因解析
- Java基础知识强化69:基本类型包装类之Character案例(统计字符串中大写小写以及数字的次数)
- 《Java编程思想》读书笔记3.操作符
- POJ 3318 Matrix Multiplication(JAVA生成随机数)
- Java基础知识强化68:基本类型包装类之Character概述和Character常见方法
- 注解驱动的springMVC与参数绑定
- Fork and Join: Java也可以轻松地编写并发程序
- 关于Java中的封装、多态、继承(1)
- [leetcode-284]Peeking Iterator(java)
- 3、下载与安装Eclipse