zoukankan      html  css  js  c++  java
  • 集合框架(下)

    1.判断List中的课程是否存在(在SetTest类中)

        //测试List的contains方法(某个序列是否包含某个对象)
        public void testListContains(){
            //取得备选课程的第0个元素
            Course course = CourseToSelect.get(0);
            //打印输出CourseToSelect是否包含course对象
            System.out.println("取得课程"+course.name);
            System.out.println("备选课程中是否包含:"+course.name+","+CourseToSelect.contains(course));
            //创建一个新的课程对象,课程的ID和name和course相同
            Course course2 = new Course(course.id,course.name);
            System.out.println("新课程:"+course2.id+","+course2.name);
            System.out.println("备选课程中是否包含:"+course2.name+","+CourseToSelect.contains(course2));
                
        }

    Contains方法:是从原来List中取出的元素才可以显示为true,即使建立新的对象中含有的内容和原List中含有对象的内容相同,也返回的事false。(因为java中所有的类都继承Object,而Object类中的equals判断内容是否相同。在Contains中是先取出元素elements再equals比较。)

    改写Course类中的equals方法(如果是课程对象内容相同则都返回true)

    package com.collection;
    
    public class Course {
        public String id;
        public String name;
        public Course(String id,String name)
        {
            this.id=id;
            this.name=name;
        }
        public Course(){
            
        }
        
        @Override
        public boolean equals(Object obj){
            if(this == obj){
                return true;
            }
            if(obj == null){
                return false;
            }
            if(!(obj instanceof Course)){
                return false;
            }
            Course course = (Course) obj;
            if(this.name==null){
                if(course.name==null){
                    return true;
                }
                else{
                    return false;
                }
            }else{
                if(this.name.equals(course.name)){
                    return true;
                }else{
                    return false;
                }
            }
            
        }
        
    
    }

    2.通过改写equlas方法,实现了从控制台输入课程对象,测试原课程CourseToSelect中是否包含新建的课程对象’

        //测试List的contains方法(某个序列是否包含某个对象)
        public void testListContains(){
            //取得备选课程的第0个元素
            Course course = CourseToSelect.get(0);
            //打印输出CourseToSelect是否包含course对象
            System.out.println("取得课程"+course.name);
            System.out.println("备选课程中是否包含:"+course.name+","+CourseToSelect.contains(course));
            
            
            //提示输出课程名称
            System.out.println("请输入课程名称");
            String name = console.next();
            //创建一个新的课程对象,课程的ID和name和course相同
            Course course2 = new Course();
            course2.name=name;
            System.out.println("新课程:"+course2.name);
            System.out.println("备选课程中是否包含:"+course2.name+","+CourseToSelect.contains(course2));
                
        }

     3.通过Set的Contains方法查看选课名字中是否学生已选这门课程

    //创建学生对象并且选课
        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 : CourseToSelect) {
                    if(cr.id.equals(courseId)){
                        student.courses.add(cr);
                    }    
                }
            }
            
        }
    //测试Set的Contains方法
        public void testSetContains(){
            // 提示输入课程名字
            System.out.println("请输入课程名字");
            String name = console.next();
            Course  course = new Course();
            course.name=name;
            //打印输出新课程的名字 
            System.out.println("新课程的名字:"+course.name);
            System.out.println("备选课程中是否包含:"+course.name+student.courses.contains(name));
        }
        

    注:Object类中包含hashCode()方法,而Contain()方法先查看元素Element之后调用hashCode(),首先查看哈希编码是否一致,如果不一致则返回false,如果一致再调用equals()  。在这段代码中是先比较了哈希编码,不一致,则返回了false

    如果想显示为true则需要重新写hashCode()方法,在Course类中右击源码,选择重写hashCode和equals方法即可

    4.查找元素的索引位置indexOf和lastIndexOf

     以indexOf为例,如果List中含有多个相同的元素,则index返回第一个元素的索引位置,如果没有匹配的元素则返回-1

    5.Map中的containsKey和containsValue方法

    public void testMapContiansKeyOrValue(){
            //提示用户输入需要查找的学生ID
            System.out.println("请输入需要查找 的学生的ID");
            Scanner console = new Scanner(System.in);
            String id = console.next();
            System.out.println("您输入学生ID:"+id+"对应学生映射中是否存在:"+students.containsKey(id));
            if(students.containsKey(id)){
                System.out.println("对应学生姓名为"+students.get(id).name);
            }
            //提示用户输入需要查询的学生姓名
            System.out.println("请输入需要查找的学生的名字");
            Scanner console2 = new Scanner(System.in);
            String name = console2.next();
            if(students.containsValue(new Student(null,name))){
                System.out.println("确实存在学生"+name);
                
            }
            else{
                System.out.println("不存在该学生");
            }
            
        }
        

    注:相同的是 也需要重写hashCode 和equals方法

    下面是重写的代码(自动生成):

    package com.collection;
    
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * @学生类
     *
     */
    
    
    public class Student {
        
        public String id;
        public String name;
        public Set<Course> courses;
        
        
        @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;
        }
    
    
        public Student(String id,String name)
        {
            this.id=id;
            this.name=name;
            this.courses=new HashSet<Course>();
        }
    
    }

     5.Collection的sort()排序方法

      01):对Interger泛型的List进行排序

    //通过collection的Sort方法,对Interger泛型的List进行排序
        //产生了10个100内不重复的整数,存入到List中,在进行排序
        public void testSort1(){
            List<Integer> integerList = new ArrayList<>();
            Random random = new Random();
            Integer k;
            for(int i=0;i<10;i++){
                do{
                    k=random.nextInt(100);
                }while(integerList.contains(k));
                integerList.add(k);
                System.out.println("成功添加整数:"+k);
            }
            System.out.println("---------排序前----------:");
             for (Integer integer : integerList) {
                System.out.print(integer+",");
            }
             System.out.println();
             System.out.println("---------排序后---------:");
             Collections.sort(integerList);
             for (Integer integer : integerList) {
                    System.out.print(integer+",");
                }
            
        }
        

    02):对String类型的进行排序

    //测试String类型的List
        public void testSort2(){
            List<String> stringList = new ArrayList();
            stringList.add("my");
            stringList.add("his");
            stringList.add("your");
            stringList.add("His");
            System.out.print("---排序前---:");
            for (String string : stringList) {
                System.out.print(string+",");
            }
             System.out.println();
            Collections.sort(stringList);
            System.out.print("---排序后---:");
            for (String string : stringList) {
                System.out.print(string+",");
            }
        }
        

    注:排列顺序:数字(0-9),大写字母,小写字母

    03):对其他类型的进行排序,以Student类型为例子

    ------Comparable

    package com.collection;
    
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * @学生类
     *
     */
    
    
    public class Student implements Comparable<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>();
        }
    
    
        @Override
        public int compareTo(Student o) {
            // TODO 自动生成的方法存根
            return this.id.compareTo(o.id);
        }
    
    }
    // 其他类型的泛型排序,以Student类型为例子
        public void testSort3(){
            List<Student> studentList = new ArrayList();
            Random random = new Random();
            studentList.add(new Student(random.nextInt(1000)+"","Mike"));
            studentList.add(new Student(random.nextInt(1000)+"","Amy"));
            studentList.add(new Student(random.nextInt(1000)+"","Lucy"));
            studentList.add(new Student(1000+"","Beyone"));
            System.out.println("----排序前----:");
            for (Student student : studentList) {
                System.out.println(student.id+","+student.name);
            }
            System.out.println();
            System.out.println("---- 排序后----");
            Collections.sort(studentList);
            for (Student student : studentList) {
                System.out.println(student.id+","+student.name);
            }
        }

    原因:

     --------Comparactor

    package com.collection;
    
    import java.util.Comparator;
    
    public class StudentComparactor implements Comparator<Student> {
    
        @Override
        public int compare(Student o1, Student o2) {
            // TODO 自动生成的方法存根
            return o1.name.compareTo(o2.name);
        }
    
    }
        // 其他类型的泛型排序,以Student类型为例子
        public void testSort3(){
            List<Student> studentList = new ArrayList();
            Random random = new Random();
            studentList.add(new Student(random.nextInt(1000)+"","Mike"));
            studentList.add(new Student(random.nextInt(1000)+"","Amy"));
            studentList.add(new Student(random.nextInt(1000)+"","Lucy"));
            studentList.add(new Student(1000+"","Beyone"));
            System.out.println("----排序前----:");
            for (Student student : studentList) {
                System.out.println(student.id+","+student.name);
            }
            System.out.println();
            System.out.println("---- 排序后----");
            Collections.sort(studentList);
            for (Student student : studentList) {
                System.out.println(student.id+","+student.name);
            }
            Collections.sort(studentList, new StudentComparactor());
            System.out.println("----按照姓名排序----");
            for (Student student : studentList) {
                System.out.println(student.id+","+student.name);
            }
        }

  • 相关阅读:
    12-认识容量和升(四上)
    11 认识1-5(一上)
    10 圆柱的表面积(六下)
    009 单式折线统计图(五下)
    008 解决问题的策略 转化(苏教版 五下)
    007 分数的基本性质(五下)
    006 三位数乘两位数(四上)
    kafka,MQ消息队列
    005 圆的周长(六上)
    004 平行四边形的面积(五上)
  • 原文地址:https://www.cnblogs.com/sunxiaoyan/p/8424259.html
Copyright © 2011-2022 走看看