1.1.2.2 Vector类与Enumeration接口6 t$ |* R$ ~/ w
Vector类用于保存一组对象,由于java不支持动态数组,Vector可以用于实现跟动态数组差不多的功能。如果要将一组对象存放在某种数据结构中,但是不能确定对象的个数时,Vector是一个不错的选择。+ }9 ^5 G. N' r
例:将键盘上输入的一个数字序列的每位数字存储在vector对象中,然后在屏幕上打印出各位数字相加的结果。8 K4 z% n. o3 d$ O2 k0 X
import java.util.*; //Vector类和Enumeration接口都在这个包中
0 L4 T5 N% {: j. I( R) {8 A public class TestVector
# U% S, a* z& H2 | {" L: p3 E4 a: s8 c/ d
public static void main(String[] args)
, @8 a* t/ N1 u* E5 E) M0 P {
3 @' Z; C7 M; K2 F7 Q& s" q Vector v=new Vector();
1 z0 r9 |+ X1 ? int b=0;
2 _/ ^$ [. h* x' |; f, z! L/ Z int num=0;
: T" P; l; O% } H2 v System.out.println("Please enter number:");
3 x$ S( d; C) S3 R while(true)6 A& ?4 n% S! e7 [7 s3 k1 B
{
% F* t( ]* n: x! z' i. C# l6 N try; ~# Q+ \: j/ W" M" g- x m
{
; g% A4 y* O d A9 _, Q0 m8 w8 I b=System.in.read(); //从键盘读入一个字节内容- n D/ v Q3 [( b9 v3 r
}! z6 u& O8 x( N0 @ N0 b
catch(Exception e)8 a$ n2 V6 l) q% \4 R
{
( {9 ~- H9 D: f' b: G, m e.printStackTrace();
/ x$ P+ B4 A/ r' F }
+ f" o# \ O5 d( |% i if(b=='\r'||b=='\n') //如果是回车或换行的话,则退出while循环,即一串数据输入完成2 `2 j" G9 _0 r S, v
{
2 K( M1 n; J- e# U- r& N( R3 J break;
' ?/ C; O4 R! B; P9 q$ T }& k% Z/ O7 H, Q# W
else
: d. z& o8 n' N$ k7 S {
6 D# {+ I# k: U0 l, R# o$ c: S: n! v num=b-'0'; O5 z# z* f% I5 M& N: e% A' ]
/*由于输入的是字符数字,它的数值是它的ascii码,例如‘0’=32;‘1’=33,
; M) ^* F. s3 k 所以要想让输入的‘1’在计算机里为1,必须减去32,即‘0’*/
% }, q! D, }5 u; g( \ q' D: V! c v.addElement(new Integer(num)); //将数字存入vector
, R% F* ^! q" L }
+ H; u" b, r% X/ N }# W; y/ b8 p: I6 \/ g2 f- q) _4 f. X" I
int sum=0;
2 Z6 S' ?' w8 F9 w. X Enumeration e=v.elements();
2 x1 J$ m7 }; }1 K( E- F //取出Vector中的所有元素,必须使用elements()方法,它返回一个Enumeration接口。& M% u; [ ~1 }* b0 r2 p6 D
while(e.hasMoreElements())//如果当前指示器还指向一个对象,即还有数据: n7 \5 k7 e$ l" C& Y$ D% ?
{0 G% j) h+ g) H0 v3 P# V* ]; n
Integer intobj=(Integer)e.nextElement();
4 M; E# H% a4 V& J* t7 a //取出当前指示器所指的对象,并将指示器指向下一个对象。
4 F3 E9 H3 R G [9 @ sum+=intobj.intValue(); //将Integer对象中所包装的整数取出来,并且加到sum中。
. Z" O0 u3 N; X) z, d( p }
% w; i1 ]) |+ p% L% p$ M System.out.println(sum);//打印出这个和/ f3 @: U0 D7 s) A1 I2 b9 J4 _
}
h" j% w0 g) ` }, `, j* `4 L, n* t; B( w1 W, G$ E
Enumeration的nextelement()方法返回的是指示器指示的对象,然后将指示器指向下一个对象。
( c b' ]. Q* z: J: g- o# F0 O) i 由于vector可以存储各种类型的对象,所以编译器无法知道存储的是什么类型的对象,所以即使我们知道里面存储的是什么类型的,也要显示的说明它是什么类型的,如本例中的(Integer)e.nextElement();
! W" F c4 R, Y, C& M" P, q Enumeration接口实现了一种机制,通过这种机制,我们就可以只用hasMoreElements()方法以及nextElement()方法就可以实现所有对象的访问。 |