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方法遍历,并且根据结果可以看出,每次输出结果顺序也是不一样的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaSet是一种集合类型,它不允许重复元素,并且没有固定的顺序。常见的Set实现类有HashSet、LinkedHashSet和TreeSet。下面是Set的用法示例: 1. 创建Set对象 可以使用以下语法创建Set对象: ```java Set<T> set = new HashSet<>(); // 创建HashSet对象 Set<T> set = new LinkedHashSet<>(); // 创建LinkedHashSet对象 Set<T> set = new TreeSet<>(); // 创建TreeSet对象 ``` 其,T表示元素的类型。 2. 添加元素 可以使用add()方法向Set添加元素: ```java set.add(element); // 将元素添加到Set,如果Set已经存在该元素,add()方法不会执行任何操作 ``` 3. 删除元素 可以使用remove()方法从Set删除元素: ```java set.remove(element); // 从Set删除指定元素,如果Set不存在该元素,remove()方法不会执行任何操作 ``` 4. 判断元素是否存在 可以使用contains()方法判断Set是否存在指定元素: ```java set.contains(element); // 如果Set存在该元素,返回true;否则返回false ``` 5. 遍历元素 可以使用foreach循环或者迭代器遍历Set的元素: ```java for (T element : set) { // 对元素进行操作 } Iterator<T> iterator = set.iterator(); while (iterator.hasNext()) { T element = iterator.next(); // 对元素进行操作 } ``` 6. 获取元素个数 可以使用size()方法获取Set元素的个数: ```java set.size(); // 返回Set元素的个数 ``` 7. 清空Set 可以使用clear()方法清空Set的所有元素: ```java set.clear(); // 清空Set的所有元素 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值