Java Vector indexOf() 方法
indexOf(Object elem)
是 Java 中 Vector
类提供的一个常用方法,用于查找指定元素在向量中第一次出现的位置。如果向量中不包含该元素,则返回 -1。
方法语法
public int indexOf(Object elem)
方法参数
参数名称 | 参数类型 | 描述 |
---|---|---|
elem |
Object | 需要在向量中查找的元素 |
返回值
返回值类型 | 描述 |
---|---|
int | 返回指定元素第一次出现的索引位置,如果向量中不包含该元素则返回 -1 |
方法特点
线性搜索
indexOf()
方法从向量的第一个元素开始,依次向后进行线性搜索,直到找到匹配的元素或遍历完整个向量。
元素比较
该方法使用 equals()
方法来判断元素是否相等,因此对于自定义对象,需要正确重写 equals()
方法才能得到预期的结果。
时间复杂度
由于是线性搜索,该方法的时间复杂度为 O(n),其中 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("Banana"); // 重复元素
// 查找元素位置
int index1 = fruits.indexOf("Banana");
System.out.println("第一次出现 Banana 的位置: " + index1); // 输出 1
int index2 = fruits.indexOf("Grape");
System.out.println("Grape 的位置: " + index2); // 输出 -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("Banana"); // 重复元素
// 查找元素位置
int index1 = fruits.indexOf("Banana");
System.out.println("第一次出现 Banana 的位置: " + index1); // 输出 1
int index2 = fruits.indexOf("Grape");
System.out.println("Grape 的位置: " + index2); // 输出 -1
}
}
自定义对象查找
实例
import java.util.Vector;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写 equals 方法
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
}
public class CustomObjectExample {
public static void main(String[] args) {
Vector<Person> people = new Vector<>();
people.add(new Person("Alice", 25));
people.add(new Person("Bob", 30));
// 查找 Person 对象
Person target = new Person("Bob", 30);
int index = people.indexOf(target);
System.out.println("Bob 的位置: " + index); // 输出 1
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写 equals 方法
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
}
public class CustomObjectExample {
public static void main(String[] args) {
Vector<Person> people = new Vector<>();
people.add(new Person("Alice", 25));
people.add(new Person("Bob", 30));
// 查找 Person 对象
Person target = new Person("Bob", 30);
int index = people.indexOf(target);
System.out.println("Bob 的位置: " + index); // 输出 1
}
}
注意事项
null 值处理:
Vector
可以包含 null 元素,可以使用indexOf(null)
来查找 null 元素的位置。性能考虑:对于大型向量,频繁使用
indexOf()
可能会导致性能问题,因为它需要遍历整个向量。线程安全:
Vector
是线程安全的,indexOf()
方法在多线程环境下可以安全使用。与 ArrayList 的区别:
ArrayList
也有类似的indexOf()
方法,但Vector
的方法是同步的,而ArrayList
的不是。
相关方法
方法 | 描述 |
---|---|
lastIndexOf(Object elem) |
返回指定元素最后一次出现的位置 |
contains(Object elem) |
检查向量是否包含指定元素 |
get(int index) |
获取指定位置的元素 |
总结
Vector.indexOf(Object elem)
是一个简单但实用的方法,用于在向量中查找元素的位置。理解它的工作原理和特性对于有效使用 Vector
集合非常重要。记住要正确处理自定义对象的 equals()
方法,并注意在大数据量情况下的性能影响。
点我分享笔记