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 ...
随机推荐
- [Asp.net]SignalR实现实时日志监控
摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统.就想着如果通过.net该如何实现?所以就在想 ...
- HttpUtility.UrlEncode 和 HttpUtility.Encode 一个大深坑
进行了 Encode 之后 在解码(UrlEncode )之后 + 号莫名的变成了空格, 需要执行一个replace 操作
- Netbeans 设置模板
/** * @Description * @author ${user} * @date ${date} ${time} * @copyright ${copyright} */ 工具-->模板 ...
- PHP获取MAC地址的函数代码
获取网卡的MAC地址原码;目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 复制代码 代码如下: <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 ...
- Java实现zip压缩多个文件下载
为了更好的演示,首先创建一个文件实体FileBean,包含了文件路径和文件名称: package com.javaweb.entity; import java.io.Serializable; /* ...
- Myeclipse右键新建项目突然变的很少
额,很是焦躁,最后在界面的右上方点Myeclipse Java enterprise变回原来模样
- 常见的几个angular.js的问题
来源于网络收集 一.ng-show/ng-hide 与 ng-if的区别? 我们都知道ng-show/ng-hide实际上是通过display来进行隐藏和显示的.而ng-if实际上控制dom节点的增删 ...
- EF上下文管理
- nyoj 4 ASCII码排序 java
java输入字符:1.String s=sc.next(); 2.char a=s.charAt(0); 注意:package java 中提交不能带package java代码: import ...
- Linux系统安装LAMP
说明: 系统版本:Ubuntu14.04-LTS,可以在Ubuntu官网直接下载.Ubuntu其他版本也可安装本方法搭建LAMP环境! 步骤一,安装apache2 1 sudo apt-get ins ...