Java开发笔记(六)之集合框架 List 、Set、Map细讲

java笔记目录 List 中元素是否存在实例Set 元素是否存在实例Map 中是否包含指定的 key 和 value 实例Collections.sort(

java笔记目录

  • List 中元素是否存在实例
  • Set 元素是否存在实例
  • Map 中是否包含指定的 key 和 value 实例
  • Collections.sort() 实现 List 排序
    • Comparable --默认比较规则
    • Comparator --临时比较规则
  • 测试案例

List 中元素是否存在实例

在这里插入图片描述

	/** 测试List的contains方法*/public void testListContains(){Course course=coursesToSelect.get(0);System.out.println("取得课程"+course.name);System.out.println("备选课程中是否包含课程"+course.name+","+coursesToSelect.contains(course));//创建一个新的课程,与course对象一致 要重写Course equals方法。Course course2=new Course(course.id,course.name);System.out.println("取得课程"+course2.name);System.out.println("备选课程中是否包含课程"+course2.name+","+coursesToSelect.contains(course2));//System.out.println("请输入课程名称:");String name=console.next();Course course3 = new Course();course3.name=name;System.out.println("取得课程"+course3.name);System.out.println("备选课程中是否包含课程"+course3.name+","+coursesToSelect.contains(course3));}
	/** 测试List的contains方法 SetList.java*/public void testListContains(){Course course=coursesToSelect.get(0);System.out.println("取得课程"+course.name);System.out.println("备选课程中是否包含课程"+course.name+","+coursesToSelect.contains(course));//创建一个新的课程,与course对象一致 要重写Course equals方法。Course course2=new Course(course.id,course.name);System.out.println("取得课程"+course2.name);System.out.println("备选课程中是否包含课程"+course2.name+","+coursesToSelect.contains(course2));//System.out.println("请输入课程名称:");String name=console.next();Course course3 = new Course();course3.name=name;System.out.println("取得课程"+course3.name);System.out.println("备选课程中是否包含课程"+course3.name+","+coursesToSelect.contains(course3));}
取得课程C语言
备选课程中是否包含课程C语言,true
取得课程C语言
备选课程中是否包含课程C语言,true
请输入课程名称:
数据结构
取得课程数据结构
备选课程中是否包含课程数据结构,true

Set 元素是否存在实例

	@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic 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;}
	/** 测试Set的contains 方法*/public void testSetContains(){System.out.println("请输入学生已选的课程名称:");String name = console.next();Course course3 = new Course();course3.name = name;System.out.println("取得课程" + course3.name);System.out.println("备选课程中是否包含课程" + course3.name + "," + student.courses.contains(course3));}
有如下课程待选(通过ForEach访问):
添加了课程2:C语言
添加了课程1:数据结构
添加了课程5:高等数学
添加了课程6:大学英语
添加了课程3:离散数学
添加了课程4:汇编语言
欢迎学生:小明选课!
请输入课程ID
2
请输入课程ID
1
请输入课程ID
5
请输入学生已选的课程名称:
数据结构
取得课程数据结构
备选课程中是否包含课程数据结构,true

获取索引位置

		//通过indexOf 获取索引位置if (coursesToSelect.contains(course3)) {System.out.println("课程"+course3.name+"的索引位置为:"+coursesToSelect.indexOf(course3) );}

Map 中是否包含指定的 key 和 value 实例

Student.java@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic 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;}
	/** 测试Map中,是否包含Key值或者某个Value值*/public void testContainsKeyOrValue() {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("请输入要查询的学生姓名:");String name = console.next();if (students.containsValue(new Student(null, name))) {System.out.println("在学生映射表中,确实存在学生:" + name);} else {System.out.println("在学生映射表中不存在该学生!");}}
请输入学生ID
1
请输入学生姓名:
中
成功添加学生:中
请输入学生ID
2
请输入学生姓名:
国
成功添加学生:国
请输入学生ID
3
请输入学生姓名:
强
成功添加学生:强
总共有:3个学生!
学生:中
学生:国
学生:强
请输入要查询的学生ID:
2
你输入的学生id为:2在学生映射表中是否存在: true
对应的学生为:国
请输入要查询的学生姓名:
强
在学生映射表中,确实存在学生:强

Collections.sort() 实现 List 排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;/** 1.对Integer泛型打的List进行排序* 2.String泛型的List进行排序* 3.其他泛型的List进行排序,以Student为例*/
public class CollecctionsTest {/** Integer泛型的List进行排序 插入十个100以内的不重复的随机整数,并进行排序*/public void testIntegerSort() {List<Integer> integerList = new ArrayList<Integer>();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.println("元素" + integer);}Collections.sort(integerList);System.out.println("~~~~~~~~排序后~~~~~~~~~");for (Integer integer : integerList) {System.out.println("元素" + integer);}}/** String泛型的List进行排序 添加三个乱序字符串,进行排序*/public void testStringSort() {List<String> stringList = new ArrayList<>();stringList.add("microsoft");stringList.add("google");stringList.add("lenovo");System.out.println("~~~~~~~排序前~~~~~~");for (String string : stringList) {System.out.println("元素:" + string);}Collections.sort(stringList);System.out.println("~~~~~~~排序后~~~~~~");for (String string : stringList) {System.out.println("元素:" + string);}}public static void main(String[] args) {CollecctionsTest ct = new CollecctionsTest();// ct.testIntegerSort();ct.testStringSort();}}
~~~~~~~排序前~~~~~~
元素:microsoft
元素:google
元素:lenovo
~~~~~~~排序后~~~~~~
元素:google
元素:lenovo
元素:microsoft

Comparable --默认比较规则

在这里插入图片描述

Comparator --临时比较规则

在这里插入图片描述
在这里插入图片描述

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>();}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic 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;}@Overridepublic int compareTo(Student o) {// TODO Auto-generated method stubreturn this.id.compareTo(o.id);}}
import java.util.Comparator;public class StudentComparator implements Comparator<Student> {@Overridepublic int compare(Student arg0, Student arg1) {// TODO Auto-generated method stubreturn arg0.name.compareTo(arg1.name);}}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;/** 1.对Integer泛型打的List进行排序* 2.String泛型的List进行排序* 3.其他泛型的List进行排序,以Student为例*/
public class CollecctionsTest {/** String泛型的List进行排序 添加三个乱序字符串,进行排序*/public void testStudentSort() {List<Student> stList = new ArrayList<Student>();Random random = new Random();stList.add(new Student(random.nextInt(1000) + "", "Mike"));stList.add(new Student(random.nextInt(1000) + "", "Angela"));stList.add(new Student(random.nextInt(1000) + "", "Lucy"));stList.add(new Student(10000 + "", "Beyonce"));System.out.println("~~~~~~~排序前~~~~~~");for (Student student : stList) {System.out.println("学生:" + student.id + "," + student.name);}Collections.sort(stList);System.out.println("~~~~~~~排序后~~~~~~");for (Student student : stList) {System.out.println("学生:" + student.id + "," + student.name);}Collections.sort(stList, new StudentComparator());System.out.println("~~~~~~~按照命名排序后排序后~~~~~~");for (Student student : stList) {System.out.println("学生:" + student.id + "," + student.name);}}public static void main(String[] args) {CollecctionsTest ct = new CollecctionsTest();// ct.testIntegerSort();// ct.testStringSort();ct.testStudentSort();}
}
~~~~~~~排序前~~~~~~
学生:670,Mike
学生:153,Angela
学生:674,Lucy
学生:10000,Beyonce
~~~~~~~排序后~~~~~~
学生:10000,Beyonce
学生:153,Angela
学生:670,Mike
学生:674,Lucy
~~~~~~~按照命名排序后排序后~~~~~~
学生:153,Angela
学生:10000,Beyonce
学生:674,Lucy
学生:670,Mike

在这里插入图片描述

在这里插入图片描述

测试案例