在这里演示的案例是衔接Java集合中的List(点击查看)那篇博文的,本节我们学习的Set的用法。

Set是Collection的一个重要的子接口,Set中的元素是无序排列的,并且元素不可以重复,被称为集。它有一个重要的实现类HashSet--哈希集。Set只能使用foreach或Iterator迭代器进行遍历,Set中添加某个对象,无论添加多少次,最终只会保留一个该对象的引用,并且保留的是第一次添加的那一个。

下面我们可以用添加学生课程的案例显示Set的用法:

创建一个学生类Student

 import java.util.HashSet;
import java.util.Set; /**
* 学生类
* @author lenovo
*
*/
public class Student { public String id; public String name; public Set<KeCheng> kecheng; public Student(String id,String name){
this.id = id;
this.name = name;
this.kecheng = new HashSet<KeCheng>();
} }

创建一个SetTest的演示类

 package collection;

 import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class SetTest { public List<KeCheng> kcList; public SetTest(){
this.kcList = new ArrayList<KeCheng>();
} /*
* 增加课程的方法
*/
public void addKC(){
KeCheng kc = new KeCheng("1","大学语文");
kcList.add(kc);
KeCheng kc2 = new KeCheng("2","大学英语");
kcList.add(kc2);
KeCheng kc3 = new KeCheng("3","高等数学");
kcList.add(kc3);
} /*
* 使用for each遍历课程
*/
public void testForeach(){
System.out.println("使用for each遍历课程:");
for(Object obj : kcList){
KeCheng kc = (KeCheng)obj;
System.out.println("课程:"+kc.id+":"+kc.name+";");
}
} /*
* 遍历学生选的课程
*/
public void testStuKC(Student s){
System.out.println(s.name+"选择了"+s.kecheng.size()+"门课程:");
for(KeCheng kc:s.kecheng){
System.out.println("课程ID:"+kc.id+":"+kc.name+";");
}
} public static void main(String[] args) { //实例化SetTest对象,执行添加课程、遍历课程的方法
SetTest st = new SetTest();
st.addKC();
st.testForeach(); //实例化学生的一个对象
Student stu = new Student("1","Tom"); //使用扫描器添加学生选课的ID
Scanner sc = new Scanner(System.in); for (int i = 0; i < 3; i++) {
System.out.println("请输入课程ID:");
String kcid = sc.next(); //遍历课程的List
for(KeCheng kc:st.kcList){ //判断添加的课程ID在List中是否存在
if(kc.id.equals(kcid)){
/*
* Set中,添加某个对象,无论添加多少次,
* 最终只会保留一个该对象的引用,
* 并且保留的是第一次添加的那一个
*/
stu.kecheng.add(kc);
}
} } //遍历学生所选的课程
st.testStuKC(stu);
} }

运行上面的代码,显示结果为:

使用for each遍历课程:
课程:1:大学语文;
课程:2:大学英语;
课程:3:高等数学;
请输入课程ID:
1
请输入课程ID:
2
请输入课程ID:
3
Tom选择了3门课程:
课程ID:1:大学语文;
课程ID:2:大学英语;
课程ID:3:高等数学;

删除学生所选课程 ,使用迭代器删除,用foreach会报错

         /*
* 删除课程
*/
Iterator it = stu.kecheng.iterator();
while(it.hasNext()){
KeCheng kc = (KeCheng) it.next();
if(kc.name.equals("大学语文")){
it.remove();
}
}

Java集合中Set的常见问题及用法的更多相关文章

  1. Java集合中迭代器的常用用法

    该例子展示了一个Java集合中迭代器的常用用法public class LinkedListTest { public static void main(String[] args) { List&l ...

  2. Java集合中Comparator和Comparable接口的使用

    在Java集合中,如果要比较引用类型泛型的List,我们使用Comparator和Comparable两个接口. Comparable接口 -- 默认比较规则,可比较的 实现该接口表示:这个类的实例可 ...

  3. java集合中List与set的区别

       java集合中List与set的区别.     List可以存储元素为有序性并且元素可以相同.     set存储元素为无序性并且元素不可以相同.     下面贴几段代码感受一下: ArrayL ...

  4. Java集合中的LinkedHashMap类

    jdk1.8.0_144 本文阅读最好先了解HashMap底层,可前往<Java集合中的HashMap类>. LinkedHashMap由于它的插入有序特性,也是一种比较常用的Map集合. ...

  5. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  6. Java集合中List,Set以及Map等集合体系详解

    转载请注明出处:Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有H ...

  7. Java集合中List、Set以及Map

    概述: List , Set, Map都是接口:List , Set继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有 ...

  8. java项目中ehcache缓存最简单用法

      java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...

  9. java集合中的传值和传引用

    在学习java集合过程中发现了传值和传引用的区别: 我们来看下面两句话 ●java集合就像一种容器,我们可以把多个对象(实际上是对象的引用),丢进该容器.(来自疯狂java讲义) ●当使用Iterat ...

随机推荐

  1. iOS-iOS 获取蓝色文件夹图片

    Xcode创建的iOS项目内存在两种文件夹:Group(黄色, 伪文件夹) 和Folder(蓝色, 真文件夹): Group: Folder: Images.xcassets或Group文件夹内的PN ...

  2. gvim如何显示html属性代码提示? vim 如何显示 javascript属性及方法提示?

    gvim如何显示html属性代码 可以在vim中 显示 html, css, js等的属性/方法 提示: 一是: 在 ~/.vim/after/syntax/ 目录中 安装 css-color.vim ...

  3. Mastering Web Application Development with AngularJS 读书笔记(一)

    第一章笔记 (一) 一.PS:运行时配置IIS <html> <head> <script src="angular.js"></scri ...

  4. c#winform选择文件,文件夹,打开指定目录方法

    private void btnFile_Click(object sender, EventArgs e) { OpenFileDialog fileDialog = new OpenFileDia ...

  5. [译]了解AngularJS $resource

    原文: https://learnable.com/books/angularjs-novice-to-ninja/preview/understanding-angularjs-resource-e ...

  6. 【PHP面向对象(OOP)编程入门教程】14.final关键字的应用

    这个关键字只能用来定义类和定义方法, 不能使用final这个关键字来定义成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数,所以不能使用final来定义成员属性. ...

  7. Swift2.1 语法指南——访问控制

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  8. java之stream(jdk8)

    一.stream介绍 参考: Java 8 中的 Streams API 详解   Package java.util.stream   Java8初体验(二)Stream语法详解   二.例子 im ...

  9. Redis学习笔记十:独立功能之监视器

    通过执行 monitor 命令可以让客户端自己变成一个监视器,实时接收并打印当前处理的命令请求的相关信息. 127.0.0.1:6379> monitor OK 1451752646.83727 ...

  10. Redis学习笔记九:独立功能之慢查询日志

    Redis 的慢查询日志用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度. 服务器配置有两个相关选项: slowlog-log-slower-than 选项指 ...