关于Vector的一个问题

黑菜妞妞 发布于 2011/08/30 12:06
阅读 597
收藏 0

如果往Vector指定位置插入指定元素,
Vector<String> vector = new Vector<String>();
vector.add(1,"abc");
像这样添加,对吗??
为什么会报出java.lang.ArrayIndexOutOfBoundsException: 1 > 0
这样的异常,求讲解。

以下是问题补充:

@黑菜妞妞:如果把一堆顺序打乱的数据,添加到Vector中,在添加的时候进行排序,该怎么写判断语句,判断数据应添加到当前数据的前面还是后面呢???假如那些数据都是类似这样的“1,aaaa”“3,aaaa”“6,aaaa”“2,aaaa”“5,aaaa”“4,aaaa”,在添加到Vector时进行排序。 (2011/08/30 12:43)
加载中
1
曾赛
曾赛

楼主的排序算法有点类似用位图来排序,可以采用Vector来完成。

楼主的错误如 @YiChen 一楼的分析,具体的说法是:

Throws:
ArrayIndexOutOfBoundsException - if the index is out of range (index < 0 || index > size())
所以只要保证你在位置N插入数据时,Vector.size() >= N 即可。可以通过 Vector.setSize() 方法来为 Vector 设置 Size,该方法详细描述如下:

Sets the size of this vector. If the new size is greater than the current size, new null items are added to the end of the vector. If the new size is less than the current size, all components at index newSize and greater are discarded.
所以要解决楼主的问题,有两种情况:

1. 如果已经数据规模,可以在初始化时设置 Vector 的大小,之后按照楼主的算法进行插入。

2. 如果不知道数据的规模,可以在每次插入的时候做一个验证。当前要插入的位置已经在Vecter中,即 index <= vector.size() 成立,那么直接插入;如果不成立,先调用 setSize() 设置 Vector的大小为当前 index,再进行插入(当然可以使用预分配的方法,提高效率)。

黑菜妞妞
黑菜妞妞
\(^o^)/~说的很清楚,很明白!!我去试试!!!
0
逝水fox
逝水fox

vector本身为空 不存在索引号为1的位置(索引号是从0开始)

向不存在的位置插入成员抛这个异常 建议看下API的文档

黑菜妞妞
黑菜妞妞
恩 好吧 如果要想往指定位置插入数据 用Vector合适吗???
0
ys-l
ys-l
用Map,key -> value
返回顶部
顶部