|
1、集合概念:是一种工具类,是一种容器,存储任意数量的具有共同属性的对象。 2、集合的作用: 在类的内部,对数据进行组织; 简单而快速的搜索大数量的条目; 有的集合接口提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素。 有的集合接口提供了映射关系,可以通过关键字去快速查找到对应的唯一对象,而这个关键字可以是任意类型。 3、数组长度有限,集合可以动态扩展。 数组只能通过下标访问对象,类型固定,而有的集合可以通过任意对象查找所映射的对象。 ![]()
collection存储具体对象,map利用映射存储对象,key和value成对出现。 4.collection接口是list、set和queue的父接口; 4.1 list接口及其实现类——ArrayList List 是元素有序并且可以重复的集合,被称为序列; List可以精确的控制每个元素的插入位置,或删除某个位置元素; ArrayList的底层由数组来实现。 4.2 实例 通过Map<String,Student>进行学生信息管理,其中key为学生ID,value为学生对象。通过键盘输入学生信息,对集合中的学生信息进行增删改查操作。 (1)创建map,承装学生类型对象 public Map<String,Student> students (2)在构造器中初始化students属性 public MapTest(){ this.students = new HashMap<String,Student>(); } (3)输入学生ID,判断是否被占用 public void testPut(){ scanner console = new Scanner(System.in); String ID = console.next(); Student st = students.get(ID); if(st==null){ System.out.println("请输入学生姓名:"); String name = console.next();//创建新的学生对象 Student newStudent = new Student(ID,name);//通过调用students的put方法,添加ID-学生映射; students.put(ID,newStudent); System.out.println("成功添加学生:"+students.get(ID).name); }else{ System.out.println("该ID已被占用"); }} (4)测试Map的KeySet方法 public void testKeySet(){ //通过KeySet方法返回Map中的所有键的集合。 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.name); }} (5)深处Map中的映射 public void testRemove() {System.out.println("请输入要删除的学生ID!“); Scanner console = new Scanner(System.in); String ID = console.next(); Student st = students.get(ID); if(st==null){ System.out.println("该ID不存在");} students.remove(ID); System.out.println("成功删除学生:"+st.name); break; }} (6)通过entrySet方法来遍历Map public void testEntrySet(){ //通过entrySet方法返回Map中的所有键值对 Set<Entry<String,Student> > entrySet = students.entrySet(); for(Entry<String,Student> entry:entrySet){ System.out.println("取得键:"+entry.GetKey()); System.out.println("对应的值为:"+entry.getValue().name); }} (7)修改Map中的映射 public void testModify(){ System.out.println("请输入要修改的学生ID:"); Scanner console = new Scanner(System.in); while(true){ String stuID = console.next(); Student student = students.get(stuID); if(student==null){ System.out.println("该ID不存在!请重新输入!"); continue; } //提示当前对应的学生对象的姓名 System.out.println("当前该学生ID所对应的学生为:"+student.name); System.out.println("请输入新的学生姓名:"); String name = console.next(); Student newStudent= new Student(stuID,name); students.put(stuID,newStudent); System.out.println("修改成功!"); break; }} (8)测试List的contains方法(判断List中课程是否存在) public void testListContains(){ Course course = coursesToSelect.get(ID); System.out.println("取得课程:"+course.name); System.out.println("备选课程中是否包含课程:"+course.name+","+courseToSelect.contains(course)); //创建一个新的对象,ID和名称与course对象完全一样 Course course2 = new Course(course.id,course.name); System.out.println("新创建课程:"+course2.name); System.out.println("备选课程中是否包含课程:"+course2.name+","+courseToSelect.contains(course2)); } (9)重写equals方法 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;}} (10)判断Set中课程是否存在(set中的contains方法) public void testSetContains(){ System.out.println("请输入学生已选课程的名称:"); String name = console.next(); //创建一个新的对象,ID和名称与course对象完全一样 Course course2 = new Course(course.id,course.name); System.out.println("新创建课程:"+course2.name); System.out.println("备选课程中是否包含课程:"+course2.name+","+student.courses.contains(course2)); } 判断Set中课程是否存在:Set.contains(obj):首先判断hashCode()返回的hash码是否相等,然后根据equals(obj)方法判断是否相等,如果想要用元素的某一属性判断,需要重写hashCode()方法和equals(obj)方法 重写hashcode方法和equals方法eclipse可以自动生成。 (11)获取List中课程的位置(List中的indexOf(方法)) if(coursesToSelect.contains(course2)) System.out.println("课程"+course2.name+"的索引位置为:"+coursesToSelect.indexOf(course2)); (12)判断Map中是否包含指定的映射 public void testContainsKeyOrValue(){ //在Map中用containsKey()方法来判断是否包含某个Key值 //用containsValue()方法来判断是否包含某个value值 System.out.println("请输入要查询的学生ID:"); Scanner console = new Scanner(System.in); Stringg id = console.next(); System.out.println("您输入的学生ID为:"+id+",在学生映射表中是否存在:"+students.containsKey(id)); if(students.containsKey(id)) System.out.println("对应的学生为:"+students.get(id).name); //用containsValue方法,来判断是否包含某个value值 String name = console.next(); if(students.containsValue(new Student(null,name))); System.out.println("在学生映射表中,确实包含学生:"+name); }
|