Java中Set集合的使用

  除了List之外,Set集合接口也经常使用,Set接口中存放的元素是无序的并且是不可重复的,因此被称为数据集;

  Set接口因为是无序的,所以没有提供像List一样的set方法来修改元素,查找,添加、删除是没问题的

  下面利用Set来演示一下学生选课的简单示例:

  课程类,Course.java

 1 /*
 2  * 课程类,规定课程结构,用于向集合中传入此类型的元素
 3  */
 4
 5 public class Course {
 6     public String id;
 7     public String name;
 8     public Course(String id,String name){
 9         //含参构造方法
10         this.id = id;
11         this.name = name;
12     }
13
14     public Course(){
15         //无参构造器,为了子类初始化隐式构造方法
16     }
17 }

  学生类,包括学号、属性、所选课程(利用Set集合存放),Student.java

 1 import java.util.HashSet;
 2 import java.util.Set;
 3
 4 /*
 5  * 学生类
 6  */
 7
 8 public class Student {
 9     public String id;
10     public String name;
11     public Set<Course> courses;    //定义Set类型的集合用于存放所选课程
12
13     public Student(String id,String name){
14         this.id = id;
15         this.name = name;
16         this.courses = new HashSet<Course>();    //通过HashSet方法实例化Set类型的引用
17     }
18 }

  同样利用了泛型,规定了Set集合存放学生所选的课程属性的类型

  操作Set集合的类,SetTest.java

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.List;
 4 import java.util.Scanner;
 5
 6 public class SetTest {
 7
 8     public List<Course> coursesToSelect;
 9     public SetTest(){
10         this.coursesToSelect = new ArrayList<Course>();
11     }
12     public void testAdd(){
13         Course cr1 = new Course("1","数据结构");
14         coursesToSelect.add(cr1);    //添加属性到List中,位置0
15
16         Course cr2 = new Course("2","C语言");
17         coursesToSelect.add(1,cr2);
18
19
20         Course[] course = {new Course("3","离散数学"),new Course("4","汇编语言")};    //创建一个课程类数组,存放多个对象
21         coursesToSelect.addAll(Arrays.asList(course));    //把数组转成List传递到courseToSelect属性中
22
23         Course[] course2 = {new Course("5","高等数学"),new Course("6","算法分析")};
24         coursesToSelect.addAll(4,Arrays.asList(course2));
25     }
26
27     /*
28      * 遍历List中的元素
29      */
30     public void testForeach(){
31         System.out.println("所有课程:");
32         for(Course cr : this.coursesToSelect){
33             System.out.println("课程:" + cr.id + ":" + cr.name);
34         }
35     }
36
37     public static void main(String[] args){
38         SetTest st = new SetTest();
39         st.testAdd();
40         st.testForeach();
41
42         //创建学生对象
43         Student stu = new Student("201201100838","小颖");
44         System.out.println("欢迎你!" + stu.name + "  学号:" + stu.id);
45
46         //接收课程输入
47         Scanner console = new Scanner(System.in);
48
49         for(int i = 0;i < 3;i++){
50             System.out.println("请输入课程ID:");
51             String courseid = console.next();
52             //遍历比对
53             for(Course cr : st.coursesToSelect){
54                 if(cr.id.equals(courseid)){
55                     stu.courses.add(cr);    //添加所选课程
56
57
58                     //重复添加不生效,相当于没添加,多个相同对象引用只保留一个
59                     stu.courses.add(cr);
60
61                     //stu.courses.add(null);    //传入空值也是可以的
62                 }
63             }
64         }
65         console.close();    //关闭输入
66         int num = stu.courses.size();
67         System.out.println("共选了" + num + "门课程,列表如下:");
68         st.SetForeach(stu);
69
70
71
72     }
73
74     /*
75      * 遍历Set中的元素只能用foreach方法或者迭代器方法,不能用get方法,因为Set中元素排列是无序的,不可能根据索引查询
76      * 并且最终每次输出也是无序的
77      */
78
79     public void SetForeach(Student stu){
80         for(Course cr:stu.courses){
81             System.out.println(cr.id + ":" + cr.name);
82         }
83     }
84 }

  上面的程序就可以实现选课的简单功能,首先初始化备选课程放入List中,然后进行输入比对,存入学生类中Set中,然后利用foreach遍历出Set中的结果,实现的选课内容的输出,效果如下:

  

  Set接口使用和List基本一致,显著特点就是Set中的元素无序并且不可重复,需要注意的地方就是,例子中对对象进行了重复添加,但是没有任何作用,重复添加多个相同对象时,Set中只保留一个,另外添加null空指针也是可以的;Set中元素因为其无序性,所以不能用get方法来查找,只能通过foreach或者iterator方法遍历,并且根据结果可以看出,每次输出结果顺序也是不一样的

时间: 2024-08-02 11:04:19

Java中Set集合的使用的相关文章

java中的集合框架

由于数组具有属性单一,长度不可改变的缺点,于是在程序中我们使用集合来代替它. 集合中不可放入基本数据类型,基本数据类型都是通过自动拆包和自动装箱功能才能放入和取出集合. 分类:Collection接口和Map接口 Collection:存放单一值元素,又可分为list接口类型和set接口类型 list接口类型:存放元素是有序的可重复的,可通过循环来取出其中的元素,实现类ArrayList() set接口类型:hash值排列,存放元素是无序不可重复的,通过指针取出其中元素,实现类HashSet()

菜鸟日记之 java中的集合框架

java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterator接口所以具有了iterator()方法 ,该方法返回一个Iterator<T>,这个接口具有 HasNext (),next(),remove()3个方法可以在实现类里完成实现. hasNext():判断是否有下一个元素 cusor是当前的操作下标 next():读取下一个元素 remove(

java中的集合操作类(未完待续)

申明: 实习生的肤浅理解,如发现有错误之处,还望大牛们多多指点 废话 其实我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList<XXXXX>(); 但是我仅仅只是了解,list这个类是一个可变长用来存储的对象实例的类,我甚至觉得这个List对象可以理解成数组,但是却又与java中咱们正常理解的数组很多的不同,比如说,他的长度可以随着需要自动增长,比如说,实例化一个List类就和咱们声明数组的时候是不一样的! 今天的实习生活

java中TreeSet集合如何实现元素的判重

1 /* 2 看一下部分的TreeSet源码.... 3 public class TreeSet<E> extends AbstractSet<E> 4 implements NavigableSet<E>, Cloneable, java.io.Serializable 5 { 6 private transient NavigableMap<E,Object> m; 7 //NavigableMap继承SortedMap, 二者都是接口,在TreeMa

java中list集合的内容,如何使用像数据库中group by形式那样排序

java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name    money(名称)  (金额) 来源A   100来源B   200来源C   300来源B   6600来源A   99800<数据1> 最后想实现的是:如果假设这些数据在数据库中,那么通过 select name,sum(money) from Table group by name 该语句得到的Li

java中各种集合的用法和比较

一,java中各种集合的关系图 Collection       接口的接口     对象的集合 ├ List             子接口         按进入先后有序保存   可重复 │├ LinkedList    接口实现类     链表     插入删除   没有同步   线程不安全 │├ ArrayList     接口实现类      数组     随机访问   没有同步   线程不安全 │└ Vector        接口实现类       数组              

Java中的集合框架(上)

Java中的集合框架概述 集合的概念: Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象. 集合的作用: 1.在类的内部,对数据进行组织: 2.简单的快速的搜索大数据量的条目: 3.有的集合接口,提供了一系列排列有序的元素,并且 可以在序列中间快速的插入或删除有关的元素. 4.有的集合接口,提供了映射关系,可以通过 关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型. 与数组的对比一为何选择集合而不是数组 1.数组的长度固定,集合长度可变 2.数

Java 中的集合接口——List、Set、Map

Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组跟集合有什么区别: 数组:长度固定,遍历速度快 可以存储基本类型和引用类型: 集合:长度不固定,只能存储引用类型对象: 从数组跟集合的特点我们很明显的看出,数组有一定的局限性,如果我们需要不定期的往我们的数据中存储数据,数组就满足不了我们的要求. Java集合框架提供了一套性能优良.使用方便的接口和

JAVA笔记整理(九),JAVA中的集合

在工作中,我们经常需要将多个对象集中存放,可以使用数组,但是数组的长度一旦固定之后是不可变的,为了保存数量确定的数据,我们可以使用JAVA中的集合. 在我看来,JAVA中的集合可以看作是一个特殊的数据库,可以针对这个数据库进行数据的增删查改,可以查看数据库的大小,查看数据库是否为空等等. JAVA中的集合是由Collection和Map两个接口派生出来的,正因为是两个接口,所以只能通过其子类来将其实例化,下图为常用集合: Collection是List.Queue和Set接口的父接口,Map是H

Java中的集合框架-Map

前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从本篇开始,对集合框架里的另外一部分Map作一下记录. 一,集合框架的Map接口 Map与Collection不同之处在于它是以键值对来存储数据: Map比较常用的实现类有四个:HashTable,HashMap,LinkedHashMap,TreeMap: Map的方法也可以分为四类,增删改查,大致如下: 新