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); } }