美文网首页
集合Collection

集合Collection

作者: 陶宁 | 来源:发表于2018-02-16 11:14 被阅读0次

    通过一个学生选课的实例学习集合Collection,Map,HashMap,List,ArrayList,Set,HashSet的使用

    注意

    1、构造方法中如何实例化一个对象this.courses=new HashSet();
    2、用一个类把另一个类的对象封装到ArrayList里面,要注意ArrayList如果新建一个不带类型的就是object类型,set和get的时候都需要注意类型转换Course temp = (Course)coursesToSelect.get(0)
    3、ArrayList的addAll方法在使用的时候如果需要类型转换就使用Array.asList 方法coursesToSelect.addAll(Arrays.asList(Courses))
    4、Iterator 迭代器 next的方法可以获取list下一个下标的元素Course cr = (Course)it.next();hasNext方法可以返回一个boolean确认下一个下标是否有元素。
    5、list的增删改查方法
    增:add/addAll,删:remove/removeAll,改:set,查:get
    6、泛型 容器的泛型<>用于指定容器内的元素的类型
    有泛型的容器可以放入指定的元素或者其子类的元素
    泛型不能使用基本类型 必须使用其包装类 如 Integer,Long之类
    7、Set 内部是一个无重复不排序的集合
    8、Set在遍历的时候只能使用foreach方法或者iterator方法 不能使用get()方法。
    9、Set中,添加某个对象,无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那一个。
    10、Set中可以放置一个null
    11、instanceof 的用法 比较对象 进行类型检查规则是:你属于该类吗?或者你属于该类的派生类吗?

    package imook.cn.collection;
    /**
     * 课程类
     * @author RMC
     *
     */
    public class Course {
        public String id;//课程id
        public String name;
        public Course(String id, String name) {
            this.id = id;
            this.name = name;
        }
    }
    package imook.cn.collection;
    import java.util.HashSet;
    import java.util.Set;
    /*
     * 学生类
     */
    public class Student {
        public String id;//学生id
        public String name;//学生姓名
        public Set courses;//课程信息
    
        public Student(String id, String name) {
            super();
            this.id = id;
            this.name = name;
            this.courses= new HashSet();
        }
    }
    package imook.cn.collection;
    import java.util.ArrayList;
    import java.util.List;
    public class listTest {
        public List coursesToSelect;
        public listTest() {
            this.coursesToSelect = new ArrayList();
        }       
        /*
         * 用于向coursesToSelect中添加备选课程
         */ 
        public void addTest() {
            Course cr = new Course("1","数据结构");//实例化一个课程
            coursesToSelect.add(cr);//把课程作为实例对象添加到一个ArrayList里面
            Course temp = (Course)coursesToSelect.get(0);//ArrayList中取出的元素是object类的实例需要强制转换
            System.out.println(temp.id+":"+temp.name);
            
            Course cr2 = new Course("2","C语言");
            coursesToSelect.add(cr2);
            Course temp2 = (Course)coursesToSelect.get(1);
            System.out.println(temp2.id+":"+temp2.name);
            Course[] Courses =  {new Course("3","离散数学"),new Course("4","汇编语言")};        
            coursesToSelect.addAll(Arrays.asList(Courses));//asList方法可以把数组放到list表中
            Course temp3 = (Course)coursesToSelect.get(2);      
            Course temp4 = (Course)coursesToSelect.get(3);
            System.out.println(temp3.id+":"+temp3.name+temp4.id+":"+temp4.name);
        }   
        /*
         * 如何通过迭代器去遍历list
         */
    public void testIterator() {
                Iterator it = coursesToSelect.iterator();
                while(it.hasNext()) {
                    Course cr = (Course)it.next();
                    System.out.println(cr.id+":"+cr.name);
                }
                
    
        public static void main(String[]args) {
            listTest t = new listTest();
            t.addTest();
        }
    }
    
    

    增删改查 list

    package imook.cn.collection;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    public class listTest {
        public List<Course> coursesToSelect;
    
        public listTest() {
            this.coursesToSelect = new ArrayList<Course>();
        }   
        /*
         * 增
         */
        public void add() {
        Course cr = new Course("1","java基础");
        coursesToSelect.add(cr);
        Course[] Courses = {new Course("2","javaweb"),new Course("3","java多线程")};
        coursesToSelect.addAll(Arrays.asList(Courses));
        }
        /*
         * 删
         */
        public void remove() {
        Course a =  (Course)coursesToSelect.get(1);
        coursesToSelect.remove(a);
        }
        /*
         * 改
         */
        public void set() {
            Course cr = new Course("4","java虚拟机");
            coursesToSelect.set(0, cr); 
        }
        /*
         * 查
         */
        public void get() {
            for(Object temp: coursesToSelect) {
                Course a = (Course)temp;
                System.out.println(a.id+":"+a.name);
            }
            System.out.println("Iterator 查询:");
            Iterator<Course> it = coursesToSelect.iterator();
            while(it.hasNext()) {
                Course b =it.next();
                System.out.println(b.id+":"+b.name);
            }
        }
        public static void main(String[]args) {
            listTest t = new listTest();
            t.add();
            t.remove();
            t.set();
            t.get();
        }
    }
    
    

    HashSet 增 删 改的方法与list相同

    注意:Set在遍历的时候只能使用foreach方法或者iterator方法 不能使用get()方法。

    Set中,添加某个对象,无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那一个

    package imook.cn.collection;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Scanner;
    
    public class SetTest {
        public List<Course> coursesToSelect;
    
        public SetTest() {      
            coursesToSelect = new ArrayList<Course>();
        }
        /*
         * 增
         */
        public void add() {
        Course cr = new Course("1","java基础");
        coursesToSelect.add(cr);
        Course[] Courses = {new Course("2","javaweb"),new Course("3","java多线程")};
        coursesToSelect.addAll(Arrays.asList(Courses));
        CourseChild cr2 = new CourseChild("5","设计模式");
        coursesToSelect.add(cr2);
        }
        /*
         * 删
         */
        public void remove() {
        Course a =  (Course)coursesToSelect.get(1);
        coursesToSelect.remove(a);
        }
        /*
         * 改
         */
        public void set() {
            Course cr = new Course("4","java虚拟机");
            coursesToSelect.set(0, cr); 
        }
        /*
         * 查
         */
        public void get() {
            System.out.println("有以下课程待选:");
            for(Object temp: coursesToSelect) {
                Course a = (Course)temp;
                System.out.println(a.id+":"+a.name);
            }
            System.out.println("Iterator 查询:");
            Iterator<Course> it = coursesToSelect.iterator();
            while(it.hasNext()) {
                Course b =it.next();
                System.out.println(b.id+":"+b.name);
            }
        }
        public void forEachTest(Student student) {
            for(Course cr:student.courses) {
                System.out.println( "学生:"+student.name+"已选课:"+cr.id+","+cr.name);
            }
        }
        public static void main(String[]args) {
            SetTest t = new SetTest();
            t.add();
            t.remove();
            t.set();
            t.get();
            Student student = new Student("1","小米");
            System.out.println("欢迎学生:"+student.name+"选课!");
            Scanner input = new Scanner(System.in);
            for(int i=0;i<2;i++) {
                System.out.println("请输入你要选择的课程:");
                String id = input.next();
                for(Course cr:t.coursesToSelect) {
                    if(id.equals(cr.id)) {
                        student.courses.add(cr);
                    }
                }           
            }
            input.close();
            t.forEachTest(student);
        }
        
    }
    

    测试HashMap的增删改查方法

    package imook.cn.collection;
    
    import java.util.HashMap;
    import java.util.Map.Entry;
    import java.util.Scanner;
    import java.util.Set;
    
    public class MapTest {
        public HashMap<String, Student> Students;
    
        /*
         * 在构造器中初始化Students属性
         */
        public MapTest() {
            this.Students = new HashMap<String, Student>();
        }
    
        /*
         * 测试添加:输入学生ID,判断是否被占用 若未被占用,则输入姓名,创建新学生对象,并且 添加到Students中
         */
        public void testPut() {
            // 创建一个Scanner对象,用来获取输入的学生ID和姓名
            Scanner input = new Scanner(System.in);
            int i = 0;
            while (i < 3) {
                System.out.println("请输入学生ID:");
                String ID = input.next();
                // 判断ID是否被占用了
                Student st = Students.get(ID);
                if (st == null) {
                    System.out.println("请输入学生姓名:");
                    String name = input.next();
                    Student newstudent = new Student(ID, name);
                    Students.put(ID, newstudent);
                    System.out.println("成功添加学生:" + Students.get(ID).name);
                } else {
                    System.out.println("学生ID已存在");
                }
                i++;
            }
            
        }
    
        /*
         * 测试Map的KeySet方法
         */
        public void testKeySet() {
            // 通过KeySet方法,返回Map中的所有“键”的Set集合
            Set<String> keySet = Students.keySet();
            // 取得students的容量
            System.out.println(Students.size());
            // 遍历keySet,取得每一个键,再调用get方法取得每个键对应的value
            for (String stuId : keySet) {
                Student st = Students.get(stuId);
                if (st != null) {
                    System.out.println("学生:" + st.id + "姓名:" + st.name);
                }
            }
        }
    
        /*
         * 测试删除Map中的映射
         */
        public void testRemove() {
            Scanner in = new Scanner(System.in);
            while (true) {
                // 提示输入待删除的学生的ID
                System.out.println("请输入要删除的学生ID:");     
                String I = in.next();
                System.out.println(I);
                // 判断该ID是否有对应的学生对象
                Student st = Students.get(I);
                if (st == null) {
                    System.out.println("该ID不存在");
                    continue;
                }
                Students.remove(I);
                System.out.println("成功删除学生:" + st.name);
                break;
            }
        }
    
        /*
         * 通过entrySey方法遍历Map
         */
        public void testEntrySet() {
            Set<Entry<String, Student>> entrySet = Students.entrySet();
            for (Entry<String, Student> entry : entrySet) {
                System.out.println("取得键:" + entry.getKey());
                System.out.println("取得值:" + entry.getValue().name);
            }
        }
        /*
         * 利用put方法修改Map中的已有映射
         */
        public void testModify() {
            System.out.println("请输入要修改的学生ID");
            Scanner input = new Scanner(System.in);
            while(true) {
                String stId= input.next();
                Student student =Students.get(stId);
                if(student == null) {
                    System.out.println("该ID不存在!请重新输入!");
                    continue;
                }
                //提示当前对应的学生对象的姓名
                System.out.println("学生姓名为:"+student.name);
                System.out.println("请输入新的学生姓名");
                String stName= input.next();
                Student newStudent = new Student(stId,stName);
                Students.put(stId, newStudent);
                System.out.println("修改成功");
                break;
            }
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            MapTest t = new MapTest();
            t.testPut();
            t.testKeySet();
            t.testRemove();
            t.testEntrySet();
            t.testModify();
            t.testEntrySet();
        }
    
    }
    
    

    当比较的equals不满足需求的时候可以重写equals方法

    list的contains方法是比较对象在list中是否存在
    通过重写equals方法 可以拿对象的元素比较含有该元素的对象在list中是否存在

    //重写equals方法
        @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;
                }
                }
            }
    

    相关文章

      网友评论

          本文标题:集合Collection

          本文链接:https://www.haomeiwen.com/subject/cafptftx.html