Java Vector lastIndexOf( ) 方法
lastIndexOf(Object elem)
是 Java 中 Vector
类提供的一个常用方法,用于查找指定元素在向量中最后一次出现的位置索引。该方法继承自 java.util.Vector
类,是 List 接口实现的一部分。
方法语法
public int lastIndexOf(Object o)
方法参数
Object o
:需要在向量中查找的元素- 可以是任何 Java 对象
- 允许传入
null
值
注意事项
- 元素的比较使用
equals()
方法 - 如果向量中包含多个相等的元素,返回最后一个匹配项的索引
返回值
返回值类型:
int
:元素最后一次出现的索引位置
特殊情况:
- 如果元素不存在于向量中,返回
-1
- 如果向量为空,对于任何查找都会返回
-1
方法示例
基础用法示例
实例
import java.util.Vector;
public class VectorExample {
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");
// 查找 "Apple" 最后一次出现的位置
int lastIndex = fruits.lastIndexOf("Apple");
System.out.println("最后一次出现的位置: " + lastIndex); // 输出: 3
}
}
public class VectorExample {
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");
// 查找 "Apple" 最后一次出现的位置
int lastIndex = fruits.lastIndexOf("Apple");
System.out.println("最后一次出现的位置: " + lastIndex); // 输出: 3
}
}
处理不存在的元素
实例
// 继续使用上面的 fruits Vector
int index = fruits.lastIndexOf("Mango");
System.out.println("查找不存在的元素: " + index); // 输出: -1
int index = fruits.lastIndexOf("Mango");
System.out.println("查找不存在的元素: " + index); // 输出: -1
处理 null 值
实例
fruits.add(null);
fruits.add("Peach");
fruits.add(null);
int nullIndex = fruits.lastIndexOf(null);
System.out.println("null 最后一次出现的位置: " + nullIndex); // 输出: 6
fruits.add("Peach");
fruits.add(null);
int nullIndex = fruits.lastIndexOf(null);
System.out.println("null 最后一次出现的位置: " + nullIndex); // 输出: 6
方法实现原理
底层实现
Vector
内部使用数组存储元素,lastIndexOf()
方法从数组的末尾开始向前遍历查找:
实例
public synchronized int lastIndexOf(Object o) {
return lastIndexOf(o, elementCount-1);
}
return lastIndexOf(o, elementCount-1);
}
时间复杂度
- 最坏情况下为 O(n),n 是向量的大小
- 需要遍历整个向量来查找元素
相关方法对比
方法 | 描述 | 搜索方向 | 返回第一个/最后一个 |
---|---|---|---|
indexOf(Object o) |
查找元素第一次出现的位置 | 从前向后 | 第一个 |
lastIndexOf(Object o) |
查找元素最后一次出现的位置 | 从后向前 | 最后一个 |
contains(Object o) |
检查元素是否存在 | 从前向后 | 第一个 |
最佳实践
使用建议
- 在需要查找元素最后一次出现位置时使用
- 对于频繁查找操作,考虑使用
HashMap
等更高效的数据结构 - 注意线程安全性,
Vector
是线程安全的
性能考虑
- 对于大型
Vector
,频繁调用此方法可能影响性能 - 如果只需要知道元素是否存在,使用
contains()
方法更高效
常见问题解答
为什么返回 -1 而不是抛出异常?
- 这是一种约定俗成的做法,使调用方可以统一处理元素不存在的情况
- 与
indexOf()
方法保持一致
如何处理自定义对象的查找?
- 确保自定义类正确实现了
equals()
方法 - 示例:
实例
class Person {
String name;
int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return age == person.age && name.equals(person.name);
}
// 也应该重写 hashCode()
}
String name;
int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return age == person.age && name.equals(person.name);
}
// 也应该重写 hashCode()
}
与 ArrayList 的 lastIndexOf() 有什么区别?
- 功能完全相同
- 主要区别在于
Vector
的方法是同步的(线程安全) ArrayList
的版本性能略高(非同步)
点我分享笔记