Java中contains()方法使用的详细解释(源代码解释)

String类型

List<String> names= new ArrayList<>();
names.add("Jimmy");
names.add("小明");
System.out.println(names.contains("Jimmy"));
输出:true

本段代码 可以看出集合中存在“Jimmy”,运行后代码输出“true”。

contains的方法的实现原理

//调用了ArrayList的contains方法
public boolean contains(Object o) {//"o"为查找的“Jimmy”
        return indexOf(o) >= 0;//indexOf为查找这个值的下标
    }
============================================================================
//查看indexOf返回值的方法
public int indexOf(Object o) {//o为要输入的元素,准备与集合中的元素进行比较
        return indexOfRange(o, 0, size);//size为集合的长度
    }

    int indexOfRange(Object o, int start, int end) {
        Object[] es = elementData;//es没有什么具体意义,只是将集合暂时存储
        //判断输入的元素是否为空
        if (o == null) {//为空时
            for (int i = start; i < end; i++) {
                if (es[i] == null) {
                    return i;
                }
            }
        } else {//不为空时
            for (int i = start; i < end; i++) {
                //equals此时出现了多态;编译时为Object的方法,运行时则调用String的比较方法。
                if (o.equals(es[i])) {//将传入的元素与集合中的元素进行对比
                    return i;
                }
            }
        }
        return -1;
    }

Integer类型

Integer a = new Integer(9);
Integer b = new Integer(9);
Long c = new Long(9);
System.out.println(a == b);//false
System.out.println(a.equals(b));//true
System.out.println(a.equals(9));//true
System.out.println(a.equals(c));//false

contains的方法的实现原理

public boolean equals(Object obj) {//存储的是刚传进来的元素
        if (obj instanceof Integer) {//此时判断是否为Integer类型
            return value == ((Integer)obj).intValue();//obj向下转型,调用intValue方法,传入数值,通过“==”来比较。
        }
        return false;//类型不匹配返回false
    }
============================================================================
public int intValue() {
        return value;//返回输入的数值
    }

==========================================================================

以上为两种引用类型举例,引用类型不用我们自己equals重写的方法,自己的类型中都有重写equals方法,所以我们可以直接调用;不过现实中我们自己定义类时,是需要我们手动重写equals方法的,下面举一个学生管理的例子说明一下。

==========================================================================

自定义类型

//学生类---重点关注equals方法的重写
public class Student {
	private String sname;
	public Student(String sname) {
		this.sname = sname;
	}
	@Override//此时学生类要重写equals方法
	public boolean equals(Object obj) {//obj存储的是刚刚传过来的元素地址
		if(obj instanceof Student) {//判断是否为学生类
			Student stu = (Student)obj;//向下转型,调用学生类的新方法
			return this.sname.equals(stu.sname);//this指向刚刚传过来的元素,equals括号中的是集合中的元素
		}
		return false;
	}
}

============================================================================
    
//测试类
public class Test {
	public static void main(String[] args) {
    	List<Student> list = new ArrayList<>();//定义一个集合来存储数据
		Student student1 = new Student("小强");//定义三个学生的名字
		Student student2 = new Student("小白");
		Student student3 = new Student("小花");
		list.add(student1);//将三个学生的信息添加到集合中
		list.add(student2);
		list.add(student3);
		System.out.println(list.contains(new Student("小白")));//查看集合中是否有“小白”的信息
		for (Student stu : list) {//增强fou循环,此为遍历数据的一种方法
			System.out.print(stu + "\t");
		}
    }
} 
输出:
true//返回true代表集合中含有这个元素
Student [sname=小强]	Student [sname=小白]	Student [sname=小花]

 

  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java学生选课管理系统的源代码解释说明: 1. 学生类(Student.java) ```java public class Student { private String name; private int id; private List<Course> courses; // 存储已选课程 public Student(String name, int id) { this.name = name; this.id = id; this.courses = new ArrayList<>(); } // 选课 public void selectCourse(Course course) { if (!courses.contains(course)) { courses.add(course); course.addStudent(this); } } // 退课 public void dropCourse(Course course) { if (courses.contains(course)) { courses.remove(course); course.removeStudent(this); } } // 查看已选课程 public List<Course> getCourses() { return courses; } @Override public String toString() { return name + " (ID:" + id + ")"; } } ``` 该类表示一个学生,包含姓名、学号、已选课程等信息。其,`selectCourse`方法用于选课,`dropCourse`方法用于退课,`getCourses`方法用于查看已选课程。 2. 课程类(Course.java) ```java public class Course { private String name; private int id; private int maxStudents; // 最大选课人数 private List<Student> students; // 存储已选学生 public Course(String name, int id, int maxStudents) { this.name = name; this.id = id; this.maxStudents = maxStudents; this.students = new ArrayList<>(); } // 选课 public void addStudent(Student student) { if (students.size() < maxStudents && !students.contains(student)) { students.add(student); student.selectCourse(this); } } // 退课 public void removeStudent(Student student) { if (students.contains(student)) { students.remove(student); student.dropCourse(this); } } // 查看已选学生 public List<Student> getStudents() { return students; } @Override public String toString() { return name + " (ID:" + id + ")"; } } ``` 该类表示一个课程,包含课程名称、课程编号、最大选课人数、已选学生等信息。其,`addStudent`方法用于添加已选学生,`removeStudent`方法用于移除已选学生,`getStudents`方法用于查看已选学生。 3. 学生选课系统(Main.java) ```java import java.util.Scanner; public class Main { private static Scanner scanner = new Scanner(System.in); private static Student[] students = new Student[10]; private static Course[] courses = new Course[5]; public static void main(String[] args) { initStudents(); initCourses(); showMenu(); } // 初始化学生信息 private static void initStudents() { students[0] = new Student("张三", 101); students[1] = new Student("李四", 102); students[2] = new Student("王五", 103); students[3] = new Student("赵六", 104); students[4] = new Student("钱七", 105); } // 初始化课程信息 private static void initCourses() { courses[0] = new Course("Java程序设计", 201, 3); courses[1] = new Course("Python程序设计", 202, 2); courses[2] = new Course("Web开发技术", 203, 4); courses[3] = new Course("数据库技术", 204, 3); courses[4] = new Course("计算机网络", 205, 2); } // 显示菜单 private static void showMenu() { while (true) { System.out.println("请选择操作:"); System.out.println("1. 学生选课"); System.out.println("2. 学生退课"); System.out.println("3. 查看课程信息"); System.out.println("4. 查看学生信息"); System.out.println("5. 退出系统"); int choice = scanner.nextInt(); switch (choice) { case 1: selectCourse(); break; case 2: dropCourse(); break; case 3: showCourseInfo(); break; case 4: showStudentInfo(); break; case 5: System.exit(0); break; default: System.out.println("无效的操作,请重新选择!"); } } } // 学生选课 private static void selectCourse() { System.out.print("请输入学生ID:"); int studentId = scanner.nextInt(); System.out.print("请输入课程ID:"); int courseId = scanner.nextInt(); Student student = findStudent(studentId); if (student == null) { System.out.println("未找到该学生!"); return; } Course course = findCourse(courseId); if (course == null) { System.out.println("未找到该课程!"); return; } student.selectCourse(course); System.out.println(student.getName() + "已选课程:" + course.getName()); } // 学生退课 private static void dropCourse() { System.out.print("请输入学生ID:"); int studentId = scanner.nextInt(); System.out.print("请输入课程ID:"); int courseId = scanner.nextInt(); Student student = findStudent(studentId); if (student == null) { System.out.println("未找到该学生!"); return; } Course course = findCourse(courseId); if (course == null) { System.out.println("未找到该课程!"); return; } student.dropCourse(course); System.out.println(student.getName() + "已退课程:" + course.getName()); } // 查看课程信息 private static void showCourseInfo() { for (Course course : courses) { System.out.println(course.getName() + " (ID:" + course.getId() + ", 选课人数:" + course.getStudents().size() + "/" + course.getMaxStudents() + ")"); System.out.print("已选学生:"); for (Student student : course.getStudents()) { System.out.print(student.getName() + " "); } System.out.println(); } } // 查看学生信息 private static void showStudentInfo() { for (Student student : students) { System.out.println(student.getName() + " (ID:" + student.getId() + ")"); System.out.print("已选课程:"); for (Course course : student.getCourses()) { System.out.print(course.getName() + " "); } System.out.println(); } } // 根据ID查找学生 private static Student findStudent(int id) { for (Student student : students) { if (student.getId() == id) { return student; } } return null; } // 根据ID查找课程 private static Course findCourse(int id) { for (Course course : courses) { if (course.getId() == id) { return course; } } return null; } } ``` 该类实现了一个简单的学生选课系统,包含学生选课、学生退课、查看课程信息、查看学生信息等功能。其,`initStudents`方法用于初始化学生信息,`initCourses`方法用于初始化课程信息,`showMenu`方法用于显示菜单,`selectCourse`方法用于学生选课,`dropCourse`方法用于学生退课,`showCourseInfo`方法用于查看课程信息,`showStudentInfo`方法用于查看学生信息,`findStudent`方法用于根据ID查找学生,`findCourse`方法用于根据ID查找课程。 以上就是一个简单的Java学生选课管理系统的源代码解释说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值