天高任我飞翔 » 日志 » java 之 Vector 类
java 之 Vector 类
飞翔 发表于 2006-06-14 22:23:42
今天写一个程序练习了一下java里面的Vector类。Vector可以理解为可动态改变大小的数组,它里面的元素是对Object的引用。这个类以前也研究过,提供的方法很简单也很实用。今天用这个类写一个二维Vector的程序,调试过程中发现了一些问题。
最初的代码是:
Vector result = new Vector( );
Vector temp = new Vector( );
int i;
for ( i=1; i<=5 ; i++ )
{
temp.addElement( "" + i );
result.addElement( temp );
temp.clear();
}
for ( i=1 ; i<=5 ; i++ )
{
System.out.println( ( (Vector) result.elementAt( i-1 ) ).get( 0 ) ); // ######
}
看起来没什么问题,编译也可以通过,但是执行过程却出现数组出界的错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
错误出现在打“#####”注释的一行。如果把temp.clear()这一句注释掉,执行就不会发生这个错误。
但是这样做显然不合道理的 
最后还是请教了师兄,帮忙解决了这个问题,代码作了些许的改动:
Vector result = new Vector();
int i;
for ( i=1; i<=5 ; i++ )
{
Vector temp = new Vector ( ); //*********
temp.addElement( "" + i );
result.addElement( temp );
}
for ( i=1 ; i<=5 ; i++ )
{
System.out.println( ( (Vector) result.elementAt( i-1 ) ).get( 0 ) );
}
注意打“*******”注释的一行,修改后把temp的声明放在for循环里面,并且去掉了temp.clear()这一句。
编译、执行结果是:
1
2
3
4
5
搞定,yeah~~~~~ 
考虑了一下原因,对于两维的Vector,内层的Vector对象temp是正确的,问题应该出在外层Vector对象result上。temp的定义放在for循环里面,每次就会新建一个内层Vector对象,返回一个新的引用给temp。反之,temp定义在循环之外,result每次添加的都是同一个内层vector引用,是不是这里出问题的呢?同时temp.clear()清除了所有元素,那么temp会不会被作为垃圾回收呢?
不太敢肯定自己的想法,很多东西还要多看看书,路漫漫~~~~ 
