- 集合中某个元素出现的位置—List的indexOf(),lastIndexOf()
indexOf(Object obj)方法的实现机制是从序列(List)的第0个元素开始依次循环,并且调用每个元素的equals()方法和参数对象进行比较,如果某一个元素的equals()方法返回值为true,那么就把当前元素的索引位置作为结果返回。假如序列中有多个重复的元素,只返回这个重复的元素第一次出现时所在的索引位置的值。
lastIndexOf(Object obj)方法,与indexOf()方法相反,它返回的是某个元素最后一次出现的索引位置的值,也就是它会从序列的队尾向队头进行遍历。
以上两个方法的参数对象如果在序列中都没有出现的话,那么这两个方法都会返回-1。
SetTest类部分示例代码:
package com.test.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class SetTest { public List<Course> coursesToSelect; private Scanner console; public static Student student; public SetTest() { coursesToSelect = new ArrayList<Course>(); console = new Scanner(System.in); } public void testAdd() { Course c1 = new Course("1", "数据结构");//创建课程对象的实例 Course c2 = new Course("2", "C语言"); Course c3 = new Course("3", "离散数学"); Course c4 = new Course("4", "汇编语言"); Course c5 = new Course("5", "数据结构"); Course[] course = {c1, c2, c3, c4, c5}; coursesToSelect.addAll(Arrays.asList(course)); } public void testListContains() { System.out.println("请输入课程名称:"); String courseName = console.next(); Course c3 = new Course(); c3.name = courseName; System.out.println("课程【" + c3.name + "】是否在备选课程中:" + coursesToSelect.contains(c3)); if (coursesToSelect.contains(c3)) { System.out.println("课程:" + c3.name + "第一次出现的索引位置为:" + coursesToSelect.indexOf(c3)); System.out.println("课程:" + c3.name + "最后一次出现的索引位置为:" + coursesToSelect.lastIndexOf(c3)); } } public static void main(String[] args) { SetTest st = new SetTest(); st.testAdd(); st.testListContains(); }