Java集合中Set的常见问题及用法
在这里演示的案例是衔接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的常见问题及用法的更多相关文章
- Java集合中迭代器的常用用法
该例子展示了一个Java集合中迭代器的常用用法public class LinkedListTest { public static void main(String[] args) { List&l ...
- Java集合中Comparator和Comparable接口的使用
在Java集合中,如果要比较引用类型泛型的List,我们使用Comparator和Comparable两个接口. Comparable接口 -- 默认比较规则,可比较的 实现该接口表示:这个类的实例可 ...
- java集合中List与set的区别
java集合中List与set的区别. List可以存储元素为有序性并且元素可以相同. set存储元素为无序性并且元素不可以相同. 下面贴几段代码感受一下: ArrayL ...
- Java集合中的LinkedHashMap类
jdk1.8.0_144 本文阅读最好先了解HashMap底层,可前往<Java集合中的HashMap类>. LinkedHashMap由于它的插入有序特性,也是一种比较常用的Map集合. ...
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...
- Java集合中List,Set以及Map等集合体系详解
转载请注明出处:Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有H ...
- Java集合中List、Set以及Map
概述: List , Set, Map都是接口:List , Set继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有 ...
- java项目中ehcache缓存最简单用法
java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...
- java集合中的传值和传引用
在学习java集合过程中发现了传值和传引用的区别: 我们来看下面两句话 ●java集合就像一种容器,我们可以把多个对象(实际上是对象的引用),丢进该容器.(来自疯狂java讲义) ●当使用Iterat ...
随机推荐
- Block 及注意事项
block 概念 block 是 C 语言的 是一种数据类型,可以当作参数传递 是一组预先准备好的代码,在需要的时候执行 block 的注意事项 (1)block 在实现时就会对它引用到的它所在方法中 ...
- c语言中time相关函数
工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...
- 弹出框一 之 基于bootstrap和jquery的自定义弹出框
(function ($) { window.Ewin = function () { var html = '<div id="[Id]" class="moda ...
- 来聊聊apply和call
今天在群里讨论的时候,看到有人问apply怎么使用,突然想起自己刚接触这个方法的时候,也是一样的摸不着头脑. 记得当时上网看了很多讲解,可实际用的时候还是感觉有些蒙蒙哒orz.... 后来想一想,也许 ...
- 深入浅出的javascript的正则表达式学习教程
深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...
- PHP支付宝接口RSA验证
这两天一直困扰的PHP RSA签名验证问题终于解决了,由于之前RSA接触的不多,再加上官方至今还未有PHP的SDK可供参考,因此走了一些弯路,写在这里和大家分享. 虽然支付宝官方还未提供相关SD ...
- poj3070 Fibonacci
Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...
- CSU 1328: 近似回文词
省赛的A题...现场都没什么人做...其实就一暴力水题......坑死了... 1328: 近似回文词 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1 ...
- CSS3圆角边框的使用-遁地龙卷风
0.快速入门 border-radius:50px; 1.border-radius详解 border-radius:50px; 上右下左,水平和垂直距离都是50px border-radius:50 ...
- 【转】AspNetPager分页控件用法
AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的详细代码: 1.首先到www.w ...