java中集合的结构Set类型

collection  集合

Collection接口 是List Set和Queue接口的父接口 定义了可用于操作List,Set和Queue的方法---增删改查

Set  HashSet
Set接口及其实现类---HashSet  Set是元素无序并且不可以重复的集合,被称为集
HashSet---哈希集,是Set的一个重要实现类

List--->元素有序,可以重复  Set--->元素无序,不可以重复

set循环用foreach,iterator   list集合用get()方法

课程类Course如下所示:
/**
* 课程类
*/
public class Course
{
    public String id;
    public String name;
    public Course(String id,String name){
      this.id   = id;
      this.name = name;
    }
    //添加一个无参构造器
    public Course() {
    
    }
    //重新equals函数,这个写了一部分不再写了
    /*@Override
    public boolean equals(Object obj) {
       if(this == obj) {
          return true;
       }
       if(obj == null) 
           return false;
       return true;
    }
    */
}

学生类Student如下所示:
import java.util.Set;
import java.util.HashSet;
/**
* 学生类
*/
//public class Student
public class Student implements Comparable<Student> {

    public String id;
    public String name;
    //public Set courses;//课程信息的属性,以前这样的实例
    public Set<Course>courses;//课程信息的属性

    public Student(String id,String name){ //构造器
      this.id   = id;
      this.name = name;
      //this.courses = new HashSet();//以前这样写
      this.courses = new HashSet<Course>();
    }//Student end

    @Override
    public int hashCode() {
      final int prime = 31;
      int result = 1;
      result = prime*result + ((name == null)?0:name.hashCode());
      return result;
    }
    @Override
    public boolean equals(Object obj) {
       if(this == obj)
           return true;
       if(obj == null) 
           return false;
       if(!(obj instanceof Student))
           return false;
       Student other = (Student)obj;
       if(name == null) {
         if(other.name != null) 
            return false;
       }else if(!name.equals(other.name))
           return false;
       return true;
    }
    @Override
    public int compareTo(Student o) {
       return this.id.compareTo(o.id);
    }//compareTo end
}//Student end

Set的测试类SetTest如下所示:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class SetTest
{
    public List<Course> coursesToSelect;
    private Scanner console;
    public Student student;
    public SetTest() {
      coursesToSelect = new ArrayList<Course>();
      console = new Scanner(System.in);
    }//SetTest end

    public void testAdd() {

      Course cr2 = new Course("2","C语言");
      coursesToSelect.add(0,cr2);
      Course temp2 = (Course)coursesToSelect.get(0);
      //System.out.println("添加了课程:"+temp2.id+":"+temp2.name);
    }
    /*
     * 通过for each方法访问集合元素
     * @param args
    */
    public void testForEach() {
       System.out.println("有如下课程待选(通过for each访问):");
       for(Object obj:coursesToSelect) {
          Course cr = (Course)obj;
          System.out.println("课程:"+cr.id+":"+cr.name);
       }
    }
   /*
     * 测试List的contains方法
    */
    public void testListContains() {
       //取得备选课程序列的第0个元素
       Course course = coursesToSelect.get(0);
       //打印输出coursesToSelected是否包含course对象
       System.out.println("取得课程:"+course.name);
       System.out.println("备选课程中是否包含课程:"+course.name+","+coursesToSelect.contains(course));
       //提示输入课程名称
       System.out.println("请输入课程名称:");
       String name= console.next();
       //创建一个新的课程对象,ID和名称,与course对象完全一样
       //Course course2 = new Course(course.id,course.name);
       Course course2 = new Course();
       course2.name = name;
       System.out.println("新创建课程:"+course2.name);
       System.out.println("备选课程中是否包含课程:"+course2.name+","+coursesToSelect.contains(course2));
    }
     //创建学生对象并选课
     public void createStudentAndSelectCours() {
        //创建一个学生对象
        student = new Student("1","小明");
        System.out.println("欢迎学生:"+student.name+"选课!");
        //创建一个scanner对象,用来接收从键盘输入的课程ID
        Scanner console = new Scanner(System.in);

        for(int i=0;i<3;i++) {
           System.out.println("请输入课程ID");
           String courseId = console.next();
           for(Course cr:coursesToSelect) {
              if(cr.id.equals(courseId)) {
                student.courses.add(cr);
                /**
                 set中,添加某个对象,无论添加多少次
                 最终只会保留一个该对象(的引用)
                 并且,保留的是第一次添加的那一个
                **/
                //student.courses.add(null);
                //student.courses.add(cr);
              }//if end
           }//for end
        }//最外层for end
     }//createStudentAndSelectCours end
    /*
     * 测试Set的contains方法
    */
    public void testSetContains() {
       //提示输入课程名称
       System.out.println("请输入学生已选的课程名称");
       String name=console.next();
       //创建一个新的课程对象,ID和名称,与course对象完全一样
       Course course2 = new Course();
       course2.name = name;
       System.out.println("新创建课程:"+course2.name);
       System.out.println("备选课程中是否包含课程:"+course2.name+","+student.courses.contains(course2));
       //通过indexOf方法来取得某元素的索引位置
       if(coursesToSelect.contains(course2)) {
           System.out.println("课程:"+course2.name+"的索引位置为:"+coursesToSelect.indexOf(course2));
       }
    }//testSetContains end
    public static void main(String[] args) {
       //System.out.println("nihaoya"); 
       SetTest st = new SetTest();
       st.testAdd();
      // st.testListContains();
      // st.testForEach();

      // st.createStudentAndSelectCours();
      // st.testSetContains();
       st.testListContains();
       st.testForEach();
       
       /*
        res:
        D:\javacode\code>java SetTest
        取得课程:C语言
        备选课程中是否包含课程:C语言,true
        新创建课程:C语言
        备选课程中是否包含课程:C语言,false
       */
       /*st.testForEach();
       //创建一个学生对象
       Student  student = new Student("1","小明");
       System.out.println("欢迎学生:"+student.name+"选课!");
       //创建一个Scanner对象,用来接收从键盘输入的课程ID
       Scanner console = new Scanner(System.in);
       for(int i=0;i<3;i++) {
         System.out.println("请输入课程ID");
         String courseId = console.next();
         for(Course cr:st.coursesToSelect){
            if(cr.id.equals(courseId)) {
              student.courses.add(cr);*/
              /**
               *  set中,添加某个对象,无论添加多少次
               *  最终只会保留一个该对象(的引用)
               *  并且,保留的是第一次添加的那一个
              */
              //student.courses.add(cr);
              //student.courses.add(null);
            /*}//if end
         }//里层的for
       }//最外层的for

       st.testForEachForSet(student);*/
    }//main end
    public void testForEachForSet(Student student) {
       //打印输出,学生所选的课程!
       System.out.println("共选择了:"+student.courses.size()+"门课程!");
       for(Course cr:student.courses) {
         System.out.println("选择了课程:"+cr.id+":"+cr.name);
       }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值