在Java中的向量subList()方法
Java中的向量(Vector)是一个动态数组,可以随时扩展和收缩,而且支持任意类型的数据,它的方法比较丰富,其中包括subList()方法,用于获取向量的子列表。
什么是子列表
子列表指的是一个列表中的一部分元素所构成的列表,与原列表共享相同的内存空间,任何对子列表的修改都会影响到原列表。
subList()的语法
subList()方法有两种重载形式:
public List<E> subList(int fromIndex, int toIndex)
public synchronized List<E> subList(int fromIndex, int toIndex)
其中,fromIndex指的是子列表的第一个元素的索引(包括),toIndex指的是子列表最后一个元素的索引(不包括),因此子列表的长度为:toIndex – fromIndex。
subList()的使用示例
下面来看一个例子,首先创建一个向量,并初始化它的元素:
import java.util.Vector;
public class Main {
public static void main(String[] args) {
Vector<Integer> vec = new Vector<Integer>(5);
vec.add(1);
vec.add(2);
vec.add(3);
vec.add(4);
vec.add(5);
System.out.println("原向量: " + vec);
}
}
输出结果为:原向量: [1, 2, 3, 4, 5]
现在使用subList()方法获取这个向量的子列表,从第2个元素(包括)到第4个元素(不包括):
import java.util.List;
public class Main {
public static void main(String[] args) {
Vector<Integer> vec = new Vector<Integer>(5);
vec.add(1);
vec.add(2);
vec.add(3);
vec.add(4);
vec.add(5);
System.out.println("原向量: " + vec);
List<Integer> sublist = vec.subList(1, 4);
System.out.println("子列表: " + sublist);
}
}
输出结果为:
原向量: [1, 2, 3, 4, 5]
子列表: [2, 3, 4]
可以看到,子列表中包含了原向量中索引为1、2、3的元素。
接下来,对原向量中的第2个元素进行修改,再次输出原向量和子列表:
public class Main {
public static void main(String[] args) {
Vector<Integer> vec = new Vector<Integer>(5);
vec.add(1);
vec.add(2);
vec.add(3);
vec.add(4);
vec.add(5);
System.out.println("原向量: " + vec);
List<Integer> sublist = vec.subList(1, 4);
System.out.println("子列表: " + sublist);
vec.set(1, 6);
System.out.println("修改后的原向量: " + vec);
System.out.println("子列表: " + sublist);
}
}
输出结果为:
原向量: [1, 2, 3, 4, 5]
子列表: [2, 3, 4]
修改后的原向量: [1, 6, 3, 4, 5]
子列表: [6, 3, 4]
可以看到,修改原向量中的元素2为6之后,子列表中的相应元素也被修改了。
subList()的注意事项
在使用subList()方法时,需要注意以下几点:
- 不能在子列表中添加或删除元素,否则将抛出UnsupportedOperationException异常;
- 修改原列表后,子列表的遍历可能会产生ConcurrentModificationException异常;
- 子列表的修改将影响到原列表。
使用Iterator遍历子列表
如果需要遍历子列表,可以使用Iterator的方式:
import java.util.Iterator;
public class Main {
public static void main(String[]args) {
Vector<Integer> vec = new Vector<Integer>(5);
vec.add(1);
vec.add(2);
vec.add(3);
vec.add(4);
vec.add(5);
System.out.println("原向量: " + vec);
List<Integer> sublist = vec.subList(1, 4);
System.out.println("子列表: " + sublist);
Iterator<Integer> it = sublist.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
输出结果为:
原向量: [1, 2, 3, 4, 5]
子列表: [2, 3, 4]
2
3
4
可以看到,使用Iterator遍历子列表时,输出了子列表中的每一个元素。
结论
subList()方法是Vector类中的一个有用的方法,用于获取向量的子列表,可以方便地对子列表进行遍历和修改操作,但需要注意子列表的修改将影响到原列表。同时,不要在子列表中添加或删除元素,否则将抛出UnsupportedOperationException异常。