Java—集合框架Set
- Set接口及其实现类——HashSet
Set是元素无序并且不可以重复的集合,被称作集。
HashSet—哈希集,是Set的一个重要实现类。
- Set的使用
HashSet没有像List一样的set()方法来用指定元素替换指定位置的元素,因为Set集合的元素是无序的。同样也不能用访问索引的方式来获取指定位置的元素。
Course.java
package com.test.collection; /**
* 课程类
* @author Administrator
*
*/
public class Course {
public String id;
public String name;
public Course(String id, String name){
this.id = id;
this.name = name;
}
}
Student.java
package com.test.collection; import java.util.HashSet;
import java.util.Set;
/**
* 学生类
* @author Administrator
*
*/
public class Student {
public String id;
public String name;
public Set<Course> courses;//所选课程
public Student(String id, String name) {
this.id = id;
this.name = name;
this.courses = new HashSet<Course>();//实例化sourses接口(Set是接口,接口不能被直接实例化)
}
}
SetTest.java
package com.test.collection; 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() {
coursesToSelect = new ArrayList<Course>();
}
public void testAdd() {
Course c1 = new Course("1", "数据结构");//创建课程对象的实例
Course c2 = new Course("2", "C语言");
Course c3 = new Course("3", "离散数学");
Course c4 = new Course("4", "汇编语言");
Course[] course = {c1, c2, c3, c4};
coursesToSelect.addAll(Arrays.asList(course));
} public void testForEach() {
System.out.println("有以下课程可以选择:(通过For Each)");
for (Object obj : coursesToSelect) {
Course c = (Course) obj;
System.out.println("课程:" + c.id + ":" + c.name);
}
} public void testForEachForSet(Student student) {
System.out.println("共选择了" + student.courses.size() + "门课程!");
for (Course c : student.courses) {
System.out.println("选择了课程:" + c.id + ":" + c.name);
}
} public static void main(String[] args) {
SetTest st = new SetTest();
st.testAdd();
st.testForEach(); Student student = new Student("1", "李雷");
Scanner console = new Scanner(System.in); for (int i = 0; i < 3; i++) {
System.out.println("请输入课程编号:");
String courseId = console.next();
for(Course c : st.coursesToSelect ) {
if (c.id.equals(courseId)) {
student.courses.add(c);
//student.courses.add(null);
}
}
} st.testForEachForSet(student);
}
}
执行结果:
有以下课程可以选择:(通过For Each)
课程::数据结构
课程::C语言
课程::离散数学
课程::汇编语言
请输入课程编号: 请输入课程编号: 请输入课程编号:
4
共选择了3门课程!
选择了课程::离散数学
选择了课程::数据结构
选择了课程::汇编语言
注:Set中,添加某个对象,无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那个。Set的remove和removeAll方法的用法与List一致。
Java—集合框架Set的更多相关文章
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- Java 集合框架
Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...
- Java集合框架之map
Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...
- 22章、Java集合框架习题
1.描述Java集合框架.列出接口.便利抽象类和具体类. Java集合框架支持2种容器:(1) 集合(Collection),存储元素集合 (2)图(Map),存储键值对.
- Java集合框架实现自定义排序
Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优 ...
- (转)Java集合框架:HashMap
来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...
- Java集合框架
集合框架体系如图所示 Java 集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于java.util包中, 所以当使用集合框架的时候需要进行导包. Map接口的常用方法 Map接口提 ...
- Java集合框架(常用类) JCF
Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...
随机推荐
- Android 通知(Notification)
1.介绍 2.常用属性 3.java后台代码 package com.lucky.test30notification; import android.app.Notification; import ...
- java - list 报java.lang.UnsupportedOperationException
情景 现在有个数组,比如:String[] array = new String[]{"1","2","3"}; 我们想要往这个数组中添加 ...
- Tomcat(一)Tomcat常用配置
操作系统:win8 Jdk版本:1.7.0_51 Jdk目录:C:\Program Files\Java\jdk1.7.0_51 Tomcat版本:8.0.3 Tomcat目录:D:\Program ...
- 比较两种数组随机排序方法的效率 JavaScript版
//比较2中数组随机排序方法的效率 JavaScript版 //randon1思路 //当len=5时候,从0-5中随机3一个放入i=0, // 从0-3随机一个2放入i=2 // 从0-2随机一个1 ...
- Xtts v4变化&先决条件&已知问题
V4变化的主要有: 1.这个采购使用简化的命令.源的一个命令(--backup)和目标的一个命令(--restore). 2.此过程只需要在源和目标的$ TMPDIR(res.txt)之间复制 ...
- 切换myEclipse工作空间后设置,myEclipse添加注释/设置豆沙背景颜色/调节字体大小
一.添加注释 操作位置: 注释规范 Files/** * @文件名称: ${file_name} * @文件路径: ${package_name} * @功能描述: ${todo} * @作者: ${ ...
- oracle OEM安装(一)
01,用户解锁添加密码 [oracle@oracle01 ~]$ sqlplus / as sysdba SQL Production :: Copyright (c) , , Oracle. All ...
- mysql 显示树结构表的节点全路径
SELECT TYPEID AS TYPEID, pTYPEID AS 父TYPEID, levels AS 父到子之间级数, concat(paths, ',', TYPEID) AS 父到子路径, ...
- 【3dsMax安装失败,如何卸载、安装3dMax 2016?】
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- 8086实时时钟实验(一)——《x86汇编语言:从实模式到保护模式》05
1.代码清单 ;代码清单9-1 ;文件名:c09_1.asm ;文件说明:用户程序 ;创建日期:2011-4-16 22:03 ;=================================== ...