Java Vector removeRange() 方法
removeRange()
方法是 Java 中 Vector
类提供的一个受保护(protected)方法,用于从 Vector
中移除指定范围内的所有元素。这个方法定义在 java.util.Vector
类中,继承自 java.util.AbstractList
类。
语法说明
protected void removeRange(int fromIndex, int toIndex)
参数说明
参数名 | 类型 | 描述 |
---|---|---|
fromIndex | int | 要移除的第一个元素的索引(包含此元素) |
toIndex | int | 要移除的最后一个元素之后的索引(不包含此元素) |
方法特点
- 范围移除:可以一次性移除一个连续范围内的多个元素
- 索引边界:
fromIndex
必须小于或等于toIndex
- 两个索引都必须在 Vector 的有效范围内(0 ≤ fromIndex ≤ toIndex ≤ size())
- 性能影响:移除元素后,所有后续元素的索引会相应前移
- 受保护方法:只能在
Vector
的子类中直接调用,或通过反射机制调用
使用示例
实例
import java.util.Vector;
public class CustomVector<E> extends Vector<E> {
public void removeElementsInRange(int from, int to) {
// 可以直接调用父类的 removeRange() 方法
this.removeRange(from, to);
}
public static void main(String[] args) {
CustomVector<String> vector = new CustomVector<>();
// 添加元素
vector.add("A");
vector.add("B");
vector.add("C");
vector.add("D");
vector.add("E");
System.out.println("原始 Vector: " + vector); // 输出: [A, B, C, D, E]
// 移除索引1到3的元素(B和C)
vector.removeElementsInRange(1, 3);
System.out.println("移除后的 Vector: " + vector); // 输出: [A, D, E]
}
}
public class CustomVector<E> extends Vector<E> {
public void removeElementsInRange(int from, int to) {
// 可以直接调用父类的 removeRange() 方法
this.removeRange(from, to);
}
public static void main(String[] args) {
CustomVector<String> vector = new CustomVector<>();
// 添加元素
vector.add("A");
vector.add("B");
vector.add("C");
vector.add("D");
vector.add("E");
System.out.println("原始 Vector: " + vector); // 输出: [A, B, C, D, E]
// 移除索引1到3的元素(B和C)
vector.removeElementsInRange(1, 3);
System.out.println("移除后的 Vector: " + vector); // 输出: [A, D, E]
}
}
注意事项
- 索引越界:如果指定的索引超出范围,会抛出
IndexOutOfBoundsException
- 不可变集合:不能用于不可变集合或使用
Collections.unmodifiableList()
包装的 Vector - 并发修改:在多线程环境中使用时需要额外的同步措施
- 替代方案:如果不需要继承 Vector,可以使用
subList(fromIndex, toIndex).clear()
性能考虑
removeRange()
方法的时间复杂度为 O(n),其中:
- n 是 Vector 的大小
- 最坏情况下(移除开头元素)需要移动所有剩余元素
对于频繁的插入删除操作,考虑使用 LinkedList
可能更高效。
常见问题
1. 为什么 removeRange() 是 protected 方法?
这是 Java 集合框架的设计决策,目的是鼓励开发者使用更通用的 List
接口方法。如果需要公开此功能,可以在子类中包装它。
2. 如何在不继承 Vector 的情况下实现范围移除?
可以使用以下替代方案:
实例
Vector<String> vector = new Vector<>();
// 添加元素...
// 使用 subList 和 clear 的组合
vector.subList(1, 3).clear();
// 添加元素...
// 使用 subList 和 clear 的组合
vector.subList(1, 3).clear();
3. removeRange() 和 removeAll() 有什么区别?
removeRange()
移除指定索引范围内的元素removeAll()
移除与指定集合中匹配的所有元素
点我分享笔记