-遍历Lsit,对集合中的每个元素进行equals判断,只要有一个元素equals返回true,则contains返回true。
-遍历Lsit,对集合中的每个元素进行equals以及hashCode判断,只要有一个元素equals以及hashCode返回true,则contains返回true。
-Course类
public class Course { // 课程编号 PRivate String id; // 课程名 private String name; public Course() { } public Course(String id, String name) { this.id = id; this.name = name; } @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 Course)) return false; Course other = (Course) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}-Student
import java.util.Set;public class Student { // 学生编号 private String id; // 学生姓名 private String name; // 课程集合 private Set<Course> courses; public Student(String id, String name, Set<Course> courses) { this.id = id; this.name = name; this.courses = courses; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Course> getCourses() { return courses; } public void setCourses(Set<Course> courses) { this.courses = courses; }}-main程序
import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.List;import java.util.Scanner;import java.util.Set;public class SetTest { private List<Course> listCourses; private Scanner scanner; private Student student; public SetTest() { } public SetTest(List<Course> listCourses, Scanner scanner) { this.listCourses = listCourses; this.scanner = scanner; } // 用于向课程集合中添加被选课程 public void add() { Course course1 = new Course("1", "数据结构"); listCourses.add(course1); Course temp = listCourses.get(0); System.out.println(temp.getId() + "/" + temp.getName()); Course course2 = new Course("2", "C语言"); /* * 在可以访问的位置中插入数据,之前相应的数据位置往后移动一位 目前可访问的位置为0 若试图访问其他位置则会发生数组下标越界异常 */ listCourses.add(0, course2); Course temp2 = listCourses.get(0); System.out.println(temp2.getId() + "/" + temp2.getName()); // 一次添加多个元素 Course[] courses = { new Course("3", "离散数学"), new Course("4", "汇编语言") }; // asList将数组转换为集合 listCourses.addAll(Arrays.asList(courses)); Course temp3 = listCourses.get(2); System.out.println(temp3.getId() + "/" + temp3.getName()); Course temp4 = listCourses.get(3); System.out.println(temp4.getId() + "/" + temp4.getName()); Course[] courses2 = { new Course("5", "高等数学"), new Course("6", "大学英语") }; // 新添加的两门课程从2处插入 listCourses.addAll(2, Arrays.asList(courses2)); Course temp5 = listCourses.get(2); System.out.println(temp5.getId() + "/" + temp5.getName()); Course temp6 = listCourses.get(3); System.out.println(temp5.getId() + "/" + temp6.getName()); } // 通过foreach遍历List public void foreach() { System.out.println("调用foreach"); for (Course course : listCourses) { System.out.println(course.getId() + "/" + course.getName()); } } // foreach输出所选课程 public void StudentForeach(Student student) { // 输出学生所选课程,输出顺序不固定 for (Course course : student.getCourses()) { System.out.println(course.getId() + "/" + course.getName()); } } // 测试List-contains方法 public void contains() { Course course = listCourses.get(0); System.out.println("取得课程:" + course.getName()); System.out.println("备选课程中是否包含:" + course.getName() + "," + listCourses.contains(course)); // 创建一个新课程对象 System.out.println("输入课程名"); String name = scanner.next(); Course course2 = new Course(); course2.setName(name); System.out.println("取得课程:" + course2.getName()); // 根据需求重写Course.equals方法来获得效果 System.out.println("备选课程中是否包含:" + course2.getName() + "," + listCourses.contains(course2)); } // 创建学生对象并选课 public void createStudentAndSelectCourse() { // 创建一个学生对象 Set<Course> courses = new HashSet<Course>(); student = new Student("1", "小明", courses); // 获取键盘输入的课程ID Scanner scanner = new Scanner(System.in); for (int i = 0; i < 3; i++) { System.out.println("请输入课程ID"); String id = scanner.next(); for (Course course : listCourses) { if (course.getId().equals(id)) { student.getCourses().add(course); } } } StudentForeach(student); } // 测试Setcontains方法 public void SetContains() { // 提示输入课程名称 System.out.println("请输入学生已选课程名称"); String name = scanner.next(); Course course2 = new Course(); course2.setName(name); System.out.println("取得课程:" + course2.getName()); // 根据需求重写Course.equals方法来获得效果 System.out.println("备选课程中是否包含:" + course2.getName() + "," + student.getCourses().contains(course2)); } public static void main(String[] args) { List<Course> list = new ArrayList<Course>(); Scanner scanner = new Scanner(System.in); ListTest listCourses = new ListTest(list); SetTest setTest = new SetTest(list, scanner); setTest.add(); setTest.foreach();// setTest.contains(); setTest.createStudentAndSelectCourse(); setTest.SetContains(); }}1/数据结构 2/C语言 3/离散数学 4/汇编语言 5/高等数学 5/大学英语 调用foreach 2/C语言 1/数据结构 5/高等数学 6/大学英语 3/离散数学 4/汇编语言 请输入课程ID 1 请输入课程ID 2 请输入课程ID 3 3/离散数学 2/C语言 1/数据结构 请输入学生已选课程名称 离散数学 取得课程:离散数学 备选课程中是否包含:离散数学,true
-代码跟之前的大同小异,此处只显示略微更改的部分
// 测试List-contains方法 public void contains() { Course course = listCourses.get(0); System.out.println("取得课程:" + course.getName()); System.out.println("备选课程中是否包含:" + course.getName() + "," + listCourses.contains(course)); // 创建一个新课程对象 System.out.println("输入课程名"); String name = scanner.next(); Course course2 = new Course(); course2.setName(name); System.out.println("取得课程:" + course2.getName()); // 根据需求重写Course.equals方法来获得效果 System.out.println("备选课程中是否包含:" + course2.getName() + "," + listCourses.contains(course2)); // 通过indexOf方法来取得元素索引位置 // 如果有多个重复元素,则返回第一次出现时所在索引位置,LastindexOf则是返回最后一次出现的位置 // 若不出现则返回索引位置为-1 if(listCourses.contains(course2)){ System.out.println("课程:"+course2.getName()+"索引位置为:"+listCourses.indexOf(course2)); } }public static void main(String[] args) { List<Course> list = new ArrayList<Course>(); Scanner scanner = new Scanner(System.in); ListTest listCourses = new ListTest(list); SetTest setTest = new SetTest(list, scanner); setTest.add(); setTest.contains(); setTest.foreach();// setTest.createStudentAndSelectCourse();// setTest.SetContains(); }1/数据结构 2/C语言 3/离散数学 4/汇编语言 5/高等数学 5/大学英语 取得课程:C语言 备选课程中是否包含:C语言,true 输入课程名 离散数学 取得课程:离散数学 备选课程中是否包含:离散数学,true 课程:离散数学索引位置为:4 调用foreach 2/C语言 1/数据结构 5/高等数学 6/大学英语 3/离散数学 4/汇编语言
-对Student中的equals进行重写
import java.util.Set;public class Student { // 学生编号 private String id; // 学生姓名 private String name; // 课程集合 private Set<Course> courses; public Student(String id, String name, Set<Course> courses) { this.id = id; this.name = name; this.courses = 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 String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Course> getCourses() { return courses; } public void setCourses(Set<Course> courses) { this.courses = courses; }}-主程序
import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Scanner;import java.util.Set;public class MapTest { // 用了盛装学生类型 private Map<String, Student> students; private Set<Course> courses; public MapTest(Map<String, Student> students) { this.students = students; } /* * 添加学生:输入ID,判断是否有学生对象, 若没有则输入姓名,创建学生对象并添加到students中 */ public void put() { Scanner scanner = new Scanner(System.in); int i = 0; while (i < 3) { System.out.println("请输入学生ID"); String id = scanner.next(); // 判断id是否被占用 Student student = students.get(id); if (student == null) { System.out.println("请输入学生姓名:"); String name = scanner.next(); Student newStudent = new Student(id, name, courses); // 向map中添加学生 students.put(id, newStudent); System.out.println("成功添加" + students.get(id).getName()); i++; } else { System.out.println("id被占用"); continue; } } } // 测试keySet public void keySet() { Set<String> key = students.keySet(); System.out.println("容量" + students.size()); for (String id : key) { Student student = students.get(id); // 判断是否为空非常必要,不然会出现空指针异常 if (student != null) { System.out.println(student.getId() + "/" + student.getName()); } } } // 测试删除Map中的映射 public void remove() { System.out.println("请输入要删除学生的id"); Scanner scanner = new Scanner(System.in); while (true) { String id = scanner.next(); Student student = students.get(id); if (student == null) { System.out.println("输入的id不存在,请重新输入"); continue; } else { students.remove(id); System.out.println("删除:" + student.getName() + "成功"); break; } } } // 通过entrySet遍历Map public void entrySet() { Set<Entry<String, Student>> entrySet = students.entrySet(); for (Entry<String, Student> entry : entrySet) { System.out.println("取得键:" + entry.getKey()); System.out.println("对应值:" + entry.getValue().getName()); } } // 利用put方法修改Map中已有映射 public void testPut() { System.out.println("请输入要修改学生的id"); Scanner scanner = new Scanner(System.in); while (true) { String id = scanner.next(); Student student = students.get(id); if (student == null) { System.out.println("输入的id不存在,请重新输入"); continue; } else { System.out.println("对应学生为:" + student.getName()); System.out.println("请输入新的学生名"); String name = scanner.next(); Student newStudent = new Student(id, name, courses); students.put(id, newStudent); System.out.println("修改成功"); break; } } } // 测试在Map中是否包含某个key值或者value值 public void containsKeyOrValue() { /* * 在Map中,用containsKey()方法,来判断是否包含某个key值 * 用containsValue()方法,来判断是否包含某个value值 作比较时经常需要对相应类的equals() 和 hasnCode() * 重写 */ System.out.println("请输入要查询的学生ID"); Scanner scanner = new Scanner(System.in); String id = scanner.next(); System.out.println("在学生映射表中是否存在:" + students.containsKey(id)); if (students.containsKey(id)) { System.out.println("对应的学生为:" + students.get(id).getName()); } System.out.println("请输入要查询的学生姓名"); String name = scanner.next(); if (students.containsValue(new Student(null, name, courses))) { System.out.println("包含学生:" + name); } else { System.out.println("该学生不存在"); } } public static void main(String[] args) { Map<String, Student> students = new HashMap<String, Student>(); MapTest mapTest = new MapTest(students); mapTest.put(); mapTest.keySet(); // mapTest.remove(); // mapTest.testPut(); // mapTest.entrySet(); mapTest.containsKeyOrValue(); } public Map<String, Student> getStudents() { return students; } public void setStudents(Map<String, Student> students) { this.students = students; }}请输入学生ID 1 请输入学生姓名: lc 成功添加lc 请输入学生ID 2 请输入学生姓名: shz 成功添加shz 请输入学生ID 3 请输入学生姓名: cjl 成功添加cjl 容量3 1/lc 2/shz 3/cjl 请输入要查询的学生ID 1 在学生映射表中是否存在:true 对应的学生为:lc 请输入要查询的学生姓名 lc 包含学生:lc
-对List排序 -对List排序 -对List排序
-先数字后字母即【0-9】、【A-Z】、【a-z】 -从高位到低位即进行比较时,字符串“1000”比“200”小
-对象想要排序则必须是可以比较的 -Comparable即给对象定义默认的排序规则
-实现该接口表示:这个类的实例可以比较大小,进行自然排序 -定义了默认的比较规则 -其实现类需实现compareTo()方法 -compareTo()方法返回正数表示大,负数表示小,0表示相等
-Comparator临时比较规则
-比较工具的接口,用于定义临时比较规则,而不是默认比较规则 -其实现类需要实现compare()方法 -Comparable and Comparator都是Java集合框架成员
调用integerSort 成功添加:29 成功添加:75 成功添加:60 成功添加:74 成功添加:39 成功添加:57 成功添加:11 成功添加:5 成功添加:0 成功添加:15 ——–排序前———- 29 75 60 74 39 57 11 5 0 15 ——–排序后———- 0 5 11 15 29 39 57 60 74 75 调用stringSort ——–排序前———- abc ggg hhd ——–排序后———- abc ggg hhd 调用studentSort ——–排序前———- 1/lc 3/shz 2/cjl ——–按id排序后———- 1/lc 2/cjl 3/shz ——–按name排序后———- 2/cjl 1/lc 3/shz
-Collection接口
List -ArrayListSet -HashSetCollections工具类 -Comparator接口 -Comparable接口Map接口新闻热点
疑难解答