Java Vector indexOf(Object elem, int index) 方法
indexOf(Object elem, int index)
是 Java 中 Vector
类提供的一个非常有用的方法,它用于在 Vector
集合中从指定位置开始搜索特定元素,并返回该元素第一次出现的索引位置。
方法语法
public int indexOf(Object elem, int index)
参数说明
参数名 | 类型 | 描述 |
---|---|---|
elem | Object | 需要在 Vector 中查找的元素 |
index | int | 开始搜索的起始索引位置(包含该位置),必须是非负数且小于 Vector 大小 |
返回值
返回值 | 描述 |
---|---|
int | 返回元素第一次出现的索引位置,如果未找到则返回 -1 |
方法特点
搜索范围
该方法从指定的 index
位置开始搜索,直到 Vector 的末尾。
元素比较
使用 equals()
方法进行元素比较,因此要确保被查找的元素类正确实现了 equals()
方法。
线程安全
由于 Vector
是线程安全的集合类,indexOf()
方法也是线程安全的。
性能考虑
这是一个线性搜索方法,时间复杂度为 O(n),不适合大规模数据的频繁搜索。
使用示例
基本用法示例
实例
import java.util.Vector;
public class VectorIndexOfExample {
public static void main(String[] args) {
// 创建一个 Vector 并添加元素
Vector<String> fruits = new Vector<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple");
fruits.add("Grape");
// 从索引 1 开始查找 "Apple"
int index = fruits.indexOf("Apple", 1);
System.out.println("'Apple' 从索引 1 开始第一次出现的位置: " + index); // 输出 3
// 查找不存在的元素
int notFound = fruits.indexOf("Mango", 0);
System.out.println("'Mango' 的查找结果: " + notFound); // 输出 -1
}
}
public class VectorIndexOfExample {
public static void main(String[] args) {
// 创建一个 Vector 并添加元素
Vector<String> fruits = new Vector<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple");
fruits.add("Grape");
// 从索引 1 开始查找 "Apple"
int index = fruits.indexOf("Apple", 1);
System.out.println("'Apple' 从索引 1 开始第一次出现的位置: " + index); // 输出 3
// 查找不存在的元素
int notFound = fruits.indexOf("Mango", 0);
System.out.println("'Mango' 的查找结果: " + notFound); // 输出 -1
}
}
边界情况示例
实例
// 测试边界情况
Vector<Integer> numbers = new Vector<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(20);
numbers.add(40);
// 起始索引等于 Vector 大小
int result1 = numbers.indexOf(20, numbers.size());
System.out.println(result1); // 输出 -1
// 起始索引为 0 等同于 indexOf(Object elem)
int result2 = numbers.indexOf(20, 0);
System.out.println(result2); // 输出 1
// 查找 null 元素
numbers.add(null);
int result3 = numbers.indexOf(null, 3);
System.out.println(result3); // 输出 5
Vector<Integer> numbers = new Vector<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(20);
numbers.add(40);
// 起始索引等于 Vector 大小
int result1 = numbers.indexOf(20, numbers.size());
System.out.println(result1); // 输出 -1
// 起始索引为 0 等同于 indexOf(Object elem)
int result2 = numbers.indexOf(20, 0);
System.out.println(result2); // 输出 1
// 查找 null 元素
numbers.add(null);
int result3 = numbers.indexOf(null, 3);
System.out.println(result3); // 输出 5
异常情况
IndexOutOfBoundsException
如果指定的 index
参数为负数或大于等于 Vector 的大小,将抛出 IndexOutOfBoundsException
。
实例
try {
int invalidIndex = fruits.indexOf("Apple", -1); // 抛出 IndexOutOfBoundsException
} catch (IndexOutOfBoundsException e) {
System.out.println("错误: " + e.getMessage());
}
int invalidIndex = fruits.indexOf("Apple", -1); // 抛出 IndexOutOfBoundsException
} catch (IndexOutOfBoundsException e) {
System.out.println("错误: " + e.getMessage());
}
与相关方法的比较
indexOf(Object elem)
这是 indexOf
方法的简化版本,默认从索引 0 开始搜索。
lastIndexOf(Object elem)
从 Vector 末尾开始向前搜索元素。
lastIndexOf(Object elem, int index)
从指定位置向前搜索元素。
实际应用场景
查找重复元素
当需要查找某个元素在 Vector 中第二次或后续出现的位置时特别有用。
分段搜索
在大 Vector 中,可以分段搜索以提高效率。
跳过已处理部分
在处理 Vector 元素时,可以跳过已处理的部分继续搜索。
最佳实践建议
- 检查返回值:总是检查返回的索引是否为 -1,表示未找到元素
- 参数验证:确保传入的 index 参数在合法范围内
- 性能考虑:对于频繁搜索操作,考虑使用其他数据结构如 HashSet
- null 处理:明确是否需要处理 null 元素,因为 Vector 允许存储 null 值
总结
Vector.indexOf(Object elem, int index)
方法是一个实用的搜索工具,它扩展了基本的 indexOf
功能,允许从指定位置开始搜索。理解这个方法的工作原理和边界情况,可以帮助开发者更有效地处理 Vector 集合中的元素查找任务。
点我分享笔记