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 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...
随机推荐
- Hibernate 环境配置和依赖添加(使用java web和普通javaSE工程)
1.Hibernate依赖包的添加 File---->Project Structure,按照如图所示操作,导入所依赖的jar包. 2.生成hibernate.hbm.xml的配置文件 (1)点 ...
- [转] Tomcat 禁用URL中的JSESSIONID
[From] http://stackoverflow.com/questions/962729/is-it-possible-to-disable-jsessionid-in-tomcat-serv ...
- Oracle之UTL_FILE 包用法详解
[转自] http://zhangzhongjie.iteye.com/blog/1903024 UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了在客户端(FORM等等)和服 ...
- 【研究】缓慢的http拒绝服务攻击
1 详细描述: 缓慢的http拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量http request攻击,直到服务器带宽被打满,造成了拒绝服 ...
- Intellij IDEA 添加项目依赖
https://blog.csdn.net/TaooLee/article/details/51305443 idea导入一个maven项目 https://blog.csdn.net/qq_3837 ...
- Java中使用nextLine(); 没有输入就自动跳过的问题
转自:https://www.cnblogs.com/1020182600HENG/p/6564795.html [问题分析] 必要的知识:in.nextLine();不能放在in.nextInt() ...
- Android四层架构
Andrid系统的体系结构设计为多层结构,这种结构在给用户提供安全保护的同时还保持了开放平台的灵活性.如下图所示: Google官方提供的Android系统的四层架构图 从上到下进行简单介绍: 一 ...
- 岛屿问题求最短路径(DFS)
用1代表陆地,用0代表陆地,你可以上下左右移动,给出下面这张地图求出最短路径 0101100001101001010110000 #include <iostream> #include ...
- cloudemanager安装时出现ProtocolError: <ProtocolError for 127.0.0.1/RPC2: 401 Unauthorized>问题解决方法(图文详解)
不多说,直接上干货! 问题详情 查看日志/var/log/cloudera-scm-agent/,得知 解决办法 $> ps -ef | grep supervisord $> kill ...
- 关于重定向printf出错 Error[Pe020]: identifier "FILE" is undefined 解决方案
IAR或者Keil用到重定向printf函数出现的错误解决方案 转发请注明出处,谢谢 原创:李剀 https://www.cnblogs.com/kevin-nancy/articles/105851 ...