集合Collection

通过一个学生选课的实例学习集合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;
            }
            }
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 集合框架体系概述 为什么出现集合类?方便多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方法. 数组...
    acc8226阅读 804评论 0 1
  • 1.集合:数组长度固定, 集合容量动态扩展; 只能通过数组下标int获得 key-value方便查找 -----...
    晏子小七阅读 734评论 0 0
  • 雪小禅讲:有些词语天生具有无法抵挡的美感,自带光环。她讲的是阴丹士林,我想到的是细数光阴。 忘记是什么时...
    雁渡寒潭_cc07阅读 497评论 0 1
  • 身边越来越多的人已经生下第二个孩子。而我和那些与我一样坚持只要一个孩子的人们,各有各的理由。 写下这篇文章,记录在...
    多瑞果阅读 2,161评论 0 0
  • 好多文章都隶属于刺激人们内心最痛的一部分,对这些伤痛一戳再戳,自以为高高在上,俯视众生,却不愿直指解决矛盾冲...
    43838f4a4352阅读 276评论 0 0