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会不会被作为垃圾回收呢?
不太敢肯定自己的想法,很多东西还要多看看书,路漫漫~~~~ 

关键词(Tag): java vector


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定