在这里演示的案例是衔接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. Orchard源码分析(5):Host相关(Orchard.Environment.DefaultOrchardHost类)

    概述 Host 是应用程序域级的单例,代表了Orchard应用程序.其处理应用程序生命周期中的初始化.BeginRequest事件.EndRequest事件等. 可以简单理解为HttpApplicat ...

  2. [MongoDB]count,gourp,distinct

    摘要 上篇文章介绍了CRUD的操作,会了这些,基本上可以完成很多工作了.但如果遇到统计类的操作,那么就需要学习下本篇的内容了. 相关文章 [MongoDB]入门操作 [MongoDB]增删改查 cou ...

  3. mysql 简单练习

    1.查找全部学生的信息 [SQL]select * from student 受影响的行: 0 时间: 0.000s 2.查出成绩及格的所有人 [SQL]select * from student w ...

  4. HTML5+ 学习笔记3 storage.增删改查

    //插入N条数据 function setItemFun( id ) { //循环插入100调数据 var dataNum = new Number(id); for ( var i=0; i< ...

  5. 如何让 height:100%; 起作用

    当你设置一个页面元素的高度(height)为100%时,期望这样元素能撑满整个浏览器窗口的高度,但大多数情况下,这样的做法没有任何效果.你知道为什么height:100%不起作用吗? 按常理,当我们用 ...

  6. 继承IDbConnection连接不同数据库

    继承IDbConnection连接不同数据库 本方案可实现仅修改app.config即可连接不同数据库,但是设计数据库时需要注意各种数据库的数据类型是不一样的. 各种不同数据库的Connection. ...

  7. Linux(Red Hat)-中安装Vmware Tools

    0. 会弹出 ***1.在弹出的文件夹中找到"VMwwareTools9.6.2-1688356.tar.gz",右击"解压缩到"...我解压缩到了" ...

  8. bzoj1179 [Apio2009]Atm

    Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口 ...

  9. ajax浅析---ScriptManager

    使用ScriptManager控件 它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX ...

  10. 【bzoj4034】[HAOI2015]树上操作

    题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...