zoukankan      html  css  js  c++  java
  • Java集合中Set的常见问题及用法

    在这里演示的案例是衔接Java集合中的List(点击查看)那篇博文的,本节我们学习的Set的用法。

    Set是Collection的一个重要的子接口,Set中的元素是无序排列的,并且元素不可以重复,被称为集。它有一个重要的实现类HashSet--哈希集。Set只能使用foreach或Iterator迭代器进行遍历,Set中添加某个对象,无论添加多少次,最终只会保留一个该对象的引用,并且保留的是第一次添加的那一个。

    下面我们可以用添加学生课程的案例显示Set的用法:

    创建一个学生类Student

     1 import java.util.HashSet;
     2 import java.util.Set;
     3 
     4 /**
     5  * 学生类
     6  * @author lenovo
     7  *
     8  */
     9 public class Student {
    10 
    11     public String id;
    12     
    13     public String name;
    14     
    15     public Set<KeCheng> kecheng;
    16     
    17     public Student(String id,String name){
    18         this.id = id;
    19         this.name = name;
    20         this.kecheng = new HashSet<KeCheng>();
    21     }
    22     
    23 }

    创建一个SetTest的演示类

     1 package collection;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.Scanner;
     6 
     7 public class SetTest {
     8 
     9     public List<KeCheng> kcList;
    10     
    11     public SetTest(){
    12         this.kcList = new ArrayList<KeCheng>();
    13     }
    14     
    15     /*
    16      * 增加课程的方法
    17      */
    18     public void addKC(){
    19         KeCheng kc = new KeCheng("1","大学语文");
    20         kcList.add(kc);
    21         KeCheng kc2 = new KeCheng("2","大学英语");
    22         kcList.add(kc2);
    23         KeCheng kc3 = new KeCheng("3","高等数学");
    24         kcList.add(kc3);
    25     }
    26     
    27     /*
    28      * 使用for each遍历课程
    29      */
    30     public void testForeach(){
    31         System.out.println("使用for each遍历课程:");
    32         for(Object obj : kcList){
    33             KeCheng kc = (KeCheng)obj;
    34             System.out.println("课程:"+kc.id+":"+kc.name+";");
    35         }
    36     }
    37     
    38     /*
    39      * 遍历学生选的课程
    40      */
    41     public void testStuKC(Student s){
    42         System.out.println(s.name+"选择了"+s.kecheng.size()+"门课程:");
    43         for(KeCheng kc:s.kecheng){
    44             System.out.println("课程ID:"+kc.id+":"+kc.name+";");
    45         }
    46     }
    47     
    48     
    49     public static void main(String[] args) {
    50         
    51         //实例化SetTest对象,执行添加课程、遍历课程的方法
    52         SetTest st = new SetTest();
    53         st.addKC();
    54         st.testForeach();
    55         
    56         
    57         //实例化学生的一个对象
    58         Student stu = new Student("1","Tom");
    59         
    60         //使用扫描器添加学生选课的ID
    61         Scanner sc = new Scanner(System.in);
    62         
    63         for (int i = 0; i < 3; i++) {
    64             System.out.println("请输入课程ID:");
    65             String kcid = sc.next();
    66             
    67             //遍历课程的List
    68             for(KeCheng kc:st.kcList){
    69                 
    70                 //判断添加的课程ID在List中是否存在
    71                 if(kc.id.equals(kcid)){
    72                     /*
    73                      * Set中,添加某个对象,无论添加多少次,
    74                      * 最终只会保留一个该对象的引用,
    75                      * 并且保留的是第一次添加的那一个
    76                      */
    77                     stu.kecheng.add(kc);
    78                 }
    79             }
    80             
    81         }
    82         
    83         //遍历学生所选的课程
    84         st.testStuKC(stu);
    85     }
    86     
    87 }

    运行上面的代码,显示结果为:

    使用for each遍历课程:
    课程:1:大学语文;
    课程:2:大学英语;
    课程:3:高等数学;
    请输入课程ID:
    1
    请输入课程ID:
    2
    请输入课程ID:
    3
    Tom选择了3门课程:
    课程ID:1:大学语文;
    课程ID:2:大学英语;
    课程ID:3:高等数学;
    

    删除学生所选课程 ,使用迭代器删除,用foreach会报错

     1         /*
     2          * 删除课程
     3          */
     4         Iterator it = stu.kecheng.iterator();
     5         while(it.hasNext()){
     6             KeCheng kc = (KeCheng) it.next();
     7             if(kc.name.equals("大学语文")){
     8                 it.remove();
     9             }
    10         }
  • 相关阅读:
    Shiro自定义密码匹配认证
    logback 发送邮件和自定义发送邮件;java类发送邮件
    webVR全景图多种方案实现(pannellum,aframe,Krpano,three,jquery-vrview)
    前端接受后端文件流并下载的几种方法
    回流(reflow)与重绘(repaint)
    JS数组去重的几种常见方法
    React 生命周期
    浅谈React工作原理
    如何在Vue项目中使用vw实现移动端适配
    移动端web整理 移动端问题总结,移动web遇到的那些坑
  • 原文地址:https://www.cnblogs.com/jpwz/p/5680284.html
Copyright © 2011-2022 走看看