a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 183|回复: 6

[JAVA] 2011年计算机等级考试二级JAVA学习精华整理(5)

[复制链接]
发表于 2012-7-31 22:04:26 | 显示全部楼层 |阅读模式
1.1.1 集合类  集合类用于存储一组对象。
# a  ^# w! |3 E) h" q1 X9 i  1.1.2.1 Java Util 包使用详解* J6 Y; V0 s9 H2 G, ]8 f0 [
  本章介绍Java的实用工具类库java.util包。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。& A2 @7 l2 o& Y0 W* D; H! H
  图1.1给出了java.util包的基本层次结构图。下面我们将具体介绍其中几个重要的类。
1 Z' F  p, M" s  ┌java.util.BitSet
1 t- E9 I9 f) }% h" b+ [( q$ U  │java.util.Calendar+ B) L! F7 t. ~6 {7 C. ^4 R$ K
  │      └java.util.GregorianCalendar5 S/ E, m1 g# b# y
  │java.util.Date2 R2 N, q! q$ }, l* m
  │java.util.Dictionary. e. l1 b( `! l( m
  │      └java.util.Hashtable8 \) k& _+ i: [8 O* y  f
  │             └java.util.Properties
& g" P8 A6 a4 d2 C" N, Z1 X  │java.util.EventObject1 l7 m) T& C7 O: A
  │java.util.ResourceBundle  {: T7 c) c  U- @
  ┌普通类┤      ├java.util.ListResourceBundle% s" U4 V# J) @" H" L# c9 U5 N
  │   │      └java.util.PropertyResourceBundle
( ]8 B1 n/ _4 O8 P& P. m- t  │   │java.util.Local$ V+ l3 {, W; B0 G' t: W
  │   │java.util.Observable# }# ^4 m$ ~. |* x& ]. Z2 N4 T
  │   │java.util.Random" X3 |" y: N) C4 M! o% T( G
  │   │java.util.StringTokenizer5 }# k0 _9 j5 K% W
  │   │java.util.Vector
  d+ V% I; H$ g( p/ e* C0 ^  │   │      └java.util.Stack
  j+ G; B$ c* j/ z, t  Java.util┤    └java.util.TimeZone# e5 C0 [" N) O  d$ G
  │          └java.util.SimpleTimeZone
2 E4 @( H1 I0 C* f7 T$ ?7 }4 m  │   ┌java.util.Enumeration, C9 D+ T  s' E
  ├接 口┤java.util.EventListener
& u' s7 j7 g0 [  }, _  │   └java.util.Observer
1 I& K6 V' B: x8 W- I3 q  │   ┌java.util.EmptyStackException$ K% L8 \- ]( V' G4 X5 y
  └异常类┤java.util.MissingResourceException
' c3 q8 z6 z8 P( k( j2 T- @  │java.util.NoSuchElementException
1 j7 v* A, u5 @5 b3 ^9 Z  m1 H  └java.util.TooManyListenersException
% D6 m5 d0 q4 c  图1.1 java.util包的基本层次结构
回复

使用道具 举报

 楼主| 发表于 2012-7-31 22:04:27 | 显示全部楼层

2011年计算机等级考试二级JAVA学习精华整理(5)

 1.1.1.1.1 日期类Date  Java在日期类中封装了有关日期和时间的信息,用户可以通过调用相应的方法来获取系统时间或设置日期和时间。Date类中有很多方法在JDK1.0公布后已经过时了,在8.3中我们将介绍JDK1.0中新加的用于替代Date的功能的其它类。3 u5 @+ p+ a1 @: a; J) J' F
  在日期类中共定义了六种构造函数。1 p: m" Q& T: d
  (1)public Date()$ G2 g9 W* U* k$ z* W
  创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间。( R  I; }8 R* O7 M+ I. H+ x6 @1 A
  例 Date today=new Date();//today被设置成创建时刻相对应的日期时间。* f( W6 t% U9 ~8 C& G8 s' W! S
  (2)public Date (long date)
+ {& t  U2 S+ h) y. k7 X  long 型的参数date可以通过调用Date类中的static方法parse(String s)来获得。
7 r, t2 o. O9 W7 L6 K7 M  例 long l=Date.parse("Mon 6 Jan 1997 13:3:00");
' k5 R2 B! u& P2 m# U  Date day=new Date(l);. ]( V& B. Y+ R; R1 {- n/ r
  //day中时间为1997年 1月6号星期一,13:3:00。
- w- x& Q. |  V  (3)public Date(String s)
1 C; F) q+ z7 B4 O. V  按字符串s产生一日期对象。s的格式与方法parse中字符串参数的模式相同。
3 Z# T& `! ^6 l' r9 i  例 Date day=new Date("Mon 6 Jan 1997 13:3:00");0 V% N. q9 H: y4 _' S
  //day 中时间为1997年1月6号星期一,13:3:00.. J3 N7 E4 T0 K' p/ w
  (4)public Date(int year,int month,int date)5 u* r- s9 H6 E9 _3 y
  (5)public Date(int year,int month,int date,int hrs,int min)
* [: D1 }" X) [+ n! [6 V  (6)public Date(int year,int month,int date,int hrs,int min,int sec)# \! ^' S7 O! N8 S: h$ {2 ?! K" K
  按给定的参数创建一日期对象。# Q( K- N6 o1 f$ e6 U. M1 S# [
  参数说明:
$ J0 T+ A5 [* u, C1 M1 h. s  c9 i  year的值为:需设定的年份-1900。例如需设定的年份是1997则year的值应为97,即1997-1900的结果。所以Date中可设定的年份最小为1900;
  I4 K" p. z1 {; ?+ V  month的值域为0~11,0代表1月,11表代表12月;
+ {) X1 w# a+ H% n' C9 J# g/ f  date的值域在1~31之间;' k& g& p0 i; {1 `1 d6 {. ?% ~( c
  hrs的值域在0~23之间。从午夜到次日凌晨1点间hrs=0,从中午到下午1点间hrs=12;
  u: G! A  G1 H2 e: w7 _  min和sec的值域在0~59之间。5 ]6 v7 j3 D. |- u$ @: a; d; a6 J  T
  例 Date day=new Date(11,3,4);+ P# d% y* P: X, n
  //day中的时间为:04-Apr-11 12:00:00 AM% P7 G2 h, W4 W  h/ J) B& c
  另外,还可以给出不正确的参数。8 [4 ?; e% q! D2 k
  例 设定时间为1910年2月30日,它将被解释成3月2日。- h9 V+ Q2 i. c# G  q
  Date day=new Date(10,1,30,10,12,34);6 b! o  A* q$ H% m3 n
  System.out.println("Day's date is:"+day);
/ S3 b; f- u; M4 }4 Y1 V  //打印结果为:Day's date is:Web Mar 02 10:13:34 GMT+08:00 19106 m+ A+ b1 k6 [* V7 ], \& I
  下面我们给出一些Date类中常用方法。
0 N- F+ J; E) ?: c: M! j  (1)public static long UTC(int year,int month,int date,int hrs. int min,int sec)
; y" a  m& N# l  k2 h8 ?7 R3 T2 q, V  该方法将利用给定参数计算UTC值。UTC是一种计时体制,与GMT(格林威治时间)的计时体系略有差别。UTC计时体系是基于原子时钟的,而GTMT计时体系是基于天文学观测的。计算中使用的一般为GMT计时体系。
0 l0 P' l  J. ~$ s; m1 v, r: i1 D  (2)public static long parse(String s)9 H+ `. v* V  ~, I# k
  该方法将字符串s转换成一个long型的日期。在介绍构造方法Date(long date)时曾使用过这个方法。4 r* i. s2 K, B8 }- Q) A/ M8 r8 ^
  字符串s有一定的格式,一般为:
" C# q) k( y# A0 ]( i! S- g  (星期 日 年 时间GMT+时区)
/ x# c7 B6 g. E5 B7 {- `  Y: F  若不注明时区,则为本地时区。
5 Y7 Y9 K6 {4 K% a  (3)public void setMonth(int month)% x" i* W9 @# n+ b7 n6 z% R3 ]% w
  (4)public int getMonth()
4 ]2 Q* R* {, ]% T/ a: K, M  这两个方法分别为设定和获取月份值。. s0 W" j+ Y2 N2 n8 y4 V$ d% N
  获取的月份的值域为0~11,0代表1月,11代表12月。
  X; h/ x: B8 j3 W: B  (5)public String toString()1 l9 c. X2 V1 \1 |* g$ L! X' s
  (6)public String toLocalString()" |- @# q% R; H7 P9 N, y  Q4 V
  (7)public String toGMTString()
) d  B( e% U/ u$ s+ N  将给定日期对象转换成不同格式的字符串。它们对应的具体的格式可参看例子8.1。
) \/ C3 K. ?" ]  (8)public int getTimezoneOffset()7 @, K& u! F2 ^. Z: C* H5 s
  该方法用于获取日期对象的时区偏移量。
3 S- o/ R$ L/ _, u( \& {' F* `  例8.1中对上面介绍的Date类中的基本方法进行了具体的应用,并打印了相应的结果。由于使用了一些过时的方法,所以编译时会有警告信息。另外,由于本例中的时间表示与平台有关,不同的JDK版本对此处理不完全相同,因此不同版本的JDK执行本例的结果可能有细微差异。
1 Y  V' F' M, E& O5 J5 R  例1.1 DateApp.java
# Y5 ?4 V% J' I/ i2 z3 R1 i) ~$ Q" r  import java.lang.System;
& u/ @0 G  c  q* j: O; f: b  import java.util.Date;
6 t! k8 q5 _8 n  public class DateApp{
' ]$ l, t4 t. W3 w+ c/ m: \  public static void main(String args[]){
5 X9 ?% R1 y. G$ E: \  Date today=new Date();" \, }2 X% ^4 o& y+ G) Z
  //today中的日期被设成创建时刻的日期和时间,假设创建时刻为1997年3月( A2 Y: U) ]5 ~8 U) X4 `  m
  //23日17时51分54秒。
9 i0 S7 S, u; h5 _: ~  System.out.println("Today's date is "+today);
7 D; D* u* h* Q) c5 ?/ l  //返回一般的时间表示法,本例中结果为6 C( Z  ^/ r8 d
  //Today's date is Fri May 23 17:51:54 1997+ K6 r6 W2 l# N- q; h. @9 n
  System.out.println("Today's date(Internet GMT)is:"
1 ?4 G, l- D* C; p8 z2 n1 V  +today.toGMTString());; a( K1 Q$ @6 k& N; E
  //返回结果为GMT时间表示法,本例中结果为! l$ J9 h/ ]3 U
  //Today's date(Internet GMT)is: 23 May 1997 09:51:54:GMT
. {, Z- p1 o! G  P  System.out.println("Today's date(Locale) is:"9 ?% R: @7 M9 U- K$ d
  +today.toLocaleString());
9 q, W1 L5 n1 B& y5 Y% h  //返回结果为本地习惯的时间表示法,结果为/ ~" q5 {* i! J8 d" ^, ]
  //Today's date(Locale)is:05/23/97 17:51:54
8 D* M+ ~! t) }1 O" O  System.out.println("Today's year is: "+today.getYear());  h5 n- l( j% Z8 h, k' G* N" E4 R
  System.out.println("Today's month is: "+(today.getMonth()+1));
* i. c$ h) U# m% W  System.out.println("Today's date is: "+today.getDate());7 u5 J1 S6 I: |2 u' }3 J! d$ ]3 d
  //调用Date类中方法,获取年月日的值。0 B# Z8 b8 ]6 q: m
  //下面调用了不同的构造方法来创建Date类的对象。
2 B' A( Q8 B+ A2 F" F  Date day1=new Date(100,1,23,10,12,34);
# h4 n3 F0 v/ X, f6 ]+ E/ u  System.out.println("Day1's date is: "+day1);
, c1 |2 ~2 r  q+ [8 M* O, c+ q  Date day2=new Date("Sat 12 Aug 1996 13:3:00");' |+ ]8 s4 f+ ^' b8 ]- q
  System.out.println("Day2's date is: "+day2);
# p, F1 u% {; ~  long l= Date.parse("Sat 5 Aug 1996 13:3:00 GMT+0800");5 w2 G/ a$ ]+ O" v
  Date day3= new Date(l);& C& ]2 o0 k8 n% r: t
  System.out.println("Day3's date(GMT)is: "+day3.toGMTString());
7 C, i* @2 \9 t. W  System.out.println("Day3's date(Locale)is: ": a* u, D* W" f& ^: @; ]
  +day3.toLocaleString());/ h" d5 `( w0 B' F) t3 _
  System.out.println("Day3's time zone offset is:"
8 q3 p7 @  d6 e+ N1 D2 a  +day3.getTimezoneOffset());9 y9 x. u1 @- M1 j5 U) Z3 w
  }2 `9 O  a4 w% Z0 S! S
  }# z+ B5 o3 J  U0 K; X
  运行结果(JDK1.3版,与原文不同,原文是JDK1.0版):( ?  @+ S' o8 q' E7 w# g( T/ h
  E:\java\tutorial\java01>java DateApp( }$ s5 N- u" f: |8 f
  Today's date is Thu Dec 27 17:58:16 CST 2001
# _' V' i9 B- R8 w" J; k$ U3 O: k  Today's date(Internet GMT)is:27 Dec 2001 09:58:16 GMT
1 D# m7 }( z; F1 y) K  Today's date(Locale) is:2001-12-27 17:58:16  E% K# w6 n& S
  Today's year is: 1018 _9 ~! O0 h: ^# ?2 H
  Today's month is: 12
" r) Q- L7 i, j  ~  Today's date is: 27! i3 v6 B6 J" x; G; }5 }. A# t1 o
  Day1's date is: Wed Feb 23 10:12:34 CST 20006 d3 d2 K  B# p) ~# Z
  Day2's date is: Fri Aug 12 13:03:00 CST 19968 P% A4 H3 A3 v/ \. r& c" g
  Day3's date(GMT)is: 5 Aug 1996 05:03:00 GMT4 u# B" w! b; L
  Day3's date(Locale)is: 1996-8-5 13:03:00
" f/ ~7 U' F, X% k* B8 W  Day3's time zone offset is:-480
. p/ L. F& q* V- p  E:\java\tutorial\java01>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 22:04:28 | 显示全部楼层

2011年计算机等级考试二级JAVA学习精华整理(5)

 1.1.1.1.2 日历类Calendar  在早期的JDK版本中,日期(Date)类附有两大功能:(1)允许用年、月、日、时、分、秒来解释日期:(2)允许对表示日期的字符串进行格式化和句法分析。在JDK1.1中提供了类Calendar来完成第一种功能,类DateFormat来完成第二项功能。dateFormat是java.text包中的一个类。与Date类有所不同的是,DateFormat类接受用各种语言和不同习惯表示的日期字符串。本节将介绍java.util包中的类Calendar及其它新增加的相关的类。
8 Y: ?: \5 Y4 W: o6 C0 v+ V" V0 \  类Calendar是一个抽象类,它完成日期(Date)类和普通日期表示法(即用一组整型域如YEAR,MONTH,DAY,HOUR表示日期)之间的转换。
1 T$ {5 s0 ?- ], D1 V  由于所使用的规则不同,不同的日历系统对同一个日期的解释有所不同。在JDK1.1中提供了Calendar类一个子类GregorianCalendar??它实现了世界上普遍使用的公历系统。当然用户也可以通过继承Calendar类,并增加所需规则,以实现不同的日历系统。
( a2 Z) n" o7 y9 i% O; F  第GregorianCalendar继承了Calendar类。本节将在介绍类GregorianCalendar的同时顺带介绍Calendar类中的相关方法。
" e$ [' T7 K+ w/ K  类GregorianCalendar提供了七种构造函数:  F) g1 t4 y4 _" i% F# {
  (1)public GregorianCalendar()
8 Q  u9 ]- M5 y# Y! a& M  创建的对象中的相关值被设置成指定时区,缺省地点的当前时间,即程序运行时所处的时区、地点的当前时间。
  U: g$ d( r* K" X' W  (2)public GregorianCalendar(TimeZone zone)
5 j! w$ h7 j/ Z$ Y+ }  创建的对象中的相关值被设置成指定时区zone,缺省地点的当前时间。
1 p/ x8 }' a1 q+ ~  (3)public GregorianCalendar(Locale aLocale)
8 e/ W5 U5 W8 ]2 V  创建的对象中的相关值被设置成缺省时区,指定地点aLocale的当前时间。  P3 b$ Z7 b( z
  (4)public GregorianCalendar(TimeZone zone,Local aLocale)" ^! W, h: e! u: }6 L& H" L8 R, Q
  创建的对象中的相关值被设置成指定时区,指定地点的当前时间。9 A' @7 s- |, |& p" X# ~9 U- B
  上面使用到的类TimeZone的性质如下:
0 r% j% [4 [$ `! n$ n. m  TimeZone是java.util包中的一个类,其中封装了有关时区的信息。每一个时区对应一组ID。类TimeZone提供了一些方法完成时区与对应ID两者之间的转换。- h9 X+ E8 \: B! C' F
  (Ⅰ)已知某个特定的ID,可以调用方法% G+ `4 W# m7 g% N, s2 X# G
  public static synchronized TimeZone getTimeZone(String ID)
8 T9 `' x: y& ~/ H- t% |8 B: _  来获取对应的时区对象。6 d$ F: x3 h  \2 C
  例 太平洋时区的ID为PST,用下面的方法可获取对应于太平洋时区的时区对象:
" [7 Z: ?: L. A# o% h  TimeZone tz=TimeZone.getTimeZone("PST");
# `5 m) H  }9 v/ }/ i0 v" H  调用方法getDefault()可以获取主机所处时区的对象。- Y8 u% S# I0 `" D" N4 p
  TimeZone tz=TimeZone.getDefault();
# _: q5 @3 Y7 x$ t& c  (Ⅱ)调用以下方法可以获取时区的ID+ Z  L( T* v/ x- M5 w1 Z) W" u& Z
  ■public static synchronized String[] getavailableIDs(int rawOffset)2 K, [  }* A/ ^$ G% u
  根据给定时区偏移值获取ID数组。同一时区的不同地区的ID可能不同,这是由于不同地区对是否实施夏时制意见不统一而造成的。& U7 [1 l' a/ ^, S! {
  例String s[]=TimeZone.getAvailableIDs(-7*60*60*1000);* |2 R7 ^* ]% F+ b% L
  打印s,结果为s[0]=PNT,s[1]=MST
# R1 h" h, S3 I  ■public static synchronized String[] getAvailableIDs()
! |0 j% D' N3 J/ q  ^* f& m% G  获取提供的所有支持的ID。' B# D, C0 n  q" J: u
  ■public String getID()
1 e6 y5 ^+ ]4 e) d9 m+ ?6 e& ^$ G1 [  获取特定时区对象的ID。
! d0 j. }) y; {# x  例 TimeZone tz=TimeZone.getDefault();. k$ ?: i! X' Q
  String s=tz.getID();
. u3 j/ c( ~' _  打印s,结果为s=CTT。! _5 Q. u- K' k! k& v& t$ s6 C& F
  上面使用类的对象代表了一个特定的地理、政治或文化区域。Locale只是一种机制,它用来标识一类对象,Local本身并不包含此类对象。( S/ _& _  x: m" K' |& a
  要获取一个Locale的对象有两种方法:% K* @% C+ x6 X6 p9 B4 h3 v
  (Ⅰ)调用Locale类的构造方法
* f! B' k4 \0 |  Locale(String language,String country)  e$ l* s0 n+ B) S! U
  Locale(String language,String country,String variant), j# C7 b; i$ a% r1 j+ t' \2 W
  参数说明:language??在ISO-639中定义的代码,由两个小写字母组成。
7 E. c  @. Y8 _% `4 k  country??在ISO-3166中定义的代码,由两个大写字母组成。
, @: ^. o  q( o  v  variant??售货商以及特定浏览器的代码,例如使用WIN代表Windows。( ?9 }/ F) P, Y( Y5 Y7 x, y7 i3 c( `
  (Ⅱ)调用Locale类中定义的常量
3 l# {2 M; n& Z/ @8 W3 T0 y  Local类提供了大量的常量供用户创建Locale对象。+ n7 C- T+ U5 r3 u; [" d8 W9 v% @! M
  例 Locale.CHINA
6 J! J( }' f2 @& Y1 V4 |9 ~2 x  为中国创建一个Locale的对象。/ z" d5 D1 W' {; I5 J) w  k) X
  类TimeZone和类Locale中的其它方法,读者可查阅API。
& d* I* M1 P3 `& }, u  (5)public GregorianCalendar(int year,int month,int date)/ u( L# V- a4 R9 Q1 Q
  (6)public GregorianCalendar(int year,int month,int date,int hour,int minute)
* g6 N& \& t7 z9 W  g  m  i0 r+ a  (7)public GregorianCalendar(int year,int month,int date,int hour,int minute,int second)1 A2 Z9 T6 ]) y
  用给定的日期和时间创建一个GregorianCalendar的对象。  E, W' x' I' g/ V
  参数说明:4 k) P& P' U& H( a6 o& X3 [
  year-设定日历对象的变量YEAR;month-设定日历对象的变量MONTH;
8 B* |) j: X0 r1 ?6 b- x  date-设定日历对象的变量DATE;hour-设定日历对象的变量HOUR_OF_DAY;
3 Q* S4 j, |: `# r9 d% O9 j3 |  minute-设定日历对象的变量MINUTE;second-设定日历对象的变量SECOND。$ G9 g/ Y" H  V$ B
  与Date类中不同的是year的值没有1900这个下限,而且year的值代表实际的年份。month的含义与Date类相同,0代表1月,11代表12月。
) I/ B1 C: S, J$ D. n4 M7 E' h2 t! r  例 GregorianCalendar cal=new GregorianCalendar(1991,2,4)
; b. ^( N, W7 ?  h+ ?3 q4 }% j  cal的日期为1991年3月4号。4 C$ @2 J; i* r! w  a
  除了与Date中类似的方法外,Calendar类还提供了有关方法对日历进行滚动计算和数学计算。计算规则由给定的日历系统决定。进行日期计算时,有时会遇到信息不足或信息不实等特殊情况。Calendar采取了相应的方法解决这些问题。当信息不足时将采用缺省设置,在GregorianCalendar类中缺省设置一般为YEAR=1970,MONTH=JANUARY,DATE=1。
9 S* F# A6 ?3 S7 o' a  当信息不实时,Calendar将按下面的次序优先选择相应的Calendar的变量组合,并将其它有冲突的信息丢弃。
/ M# ^0 {& ]! p. _# b0 r! }: ~  MONTH+DAY_OF_MONTH  S5 p$ [* r% k$ P: I! p# b
  MONTH+WEEK_OF_MONTH+DAY_OF_WEEK! R1 r( m: w4 S, M
  MONTH+DAY_OF_WEEK_OF_MONTH+DAY_OF_WEEK
$ y; _# ?% O7 g  DAY_OF+YEAR
; w& x& O/ F1 x. ?- ~4 w, _  DAY_OF_WEEK_WEEK_OF_YEAR) W6 T9 g8 r- Z7 s; ]2 o+ R
  HOUR_OF_DAY
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 22:04:29 | 显示全部楼层

2011年计算机等级考试二级JAVA学习精华整理(5)

  1.1.1.1.3 随机数类Random
7 F+ H1 K# H( N4 r5 q: W  Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。它可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java.lang.Math中的方法Random()最大的不同之处,后者只产生double型的随机数。
4 {' T5 L: N6 B4 T& C; c  H7 X  类Random中的方法十分简单,它只有两个构造方法和六个普通方法。
2 V1 z0 \$ x, t6 c0 |+ Y7 q  构造方法:
6 ]) U1 k2 S9 o& }7 L  (1)public Random()
& T9 _" R, H$ Y& }6 }$ k  (2)public Random(long seed)4 Z% J* Q# ~! m! E& N! A
  Java产生随机数需要有一个基值seed,在第一种方法中基值缺省,则将系统时间作为seed。
1 u6 |5 h4 H8 V  t8 `6 J/ g8 |$ \) k7 ?  普通方法:
( ^  v) g3 G# F# u5 R  (1)public synonronized void setSeed(long seed)
1 \- A1 y8 w" [  y6 p: L* H# O  该方法是设定基值seed。
; F+ j3 f& R. j9 i' A  (2)public int nextInt()
. [1 E- w' Y6 u% ^0 g  该方法是产生一个整型随机数。
2 ?$ L- {+ L3 Q; A  (3)public long nextLong(). {- {: O! U2 r; F+ f% |
  该方法是产生一个long型随机数。8 B2 H( p! Z5 o% w; [
  (4)public float nextFloat()4 Y, q$ i) D) z: q0 c  W' q" H
  该方法是产生一个Float型随机数。+ i% ~2 d3 ]/ a$ A) W
  (5)public double nextDouble()
9 n$ @# I0 k4 W! }; r, U' U2 y  该方法是产生一个Double型随机数。
; W& G5 i: @  _8 H9 d) ~  (6)public synchronized double nextGoussian()
2 D$ {( O1 e. R" Y$ g1 q6 S  该方法是产生一个double型的Goussian随机数。9 @: s3 n+ J! ]5 w) _7 e! i  i5 g
  例1.2 RandomApp.java。
/ G# \/ Y/ \6 @8 |  //import java.lang.*;
* n, r1 w( s' S. w4 t  import java.util.Random;
% B- Q4 g8 }& L- Y  public class RandomApp{
0 ~. a, R( ^! Z/ c  public static void main(String args[]){
: W2 t7 ~9 c+ _) s6 \  Random ran1=new Random();. q6 Y& r* Q- F
  Random ran2=new Random(12345);0 V: Y: p) }6 c
  //创建了两个类Random的对象。
0 f6 d9 C$ D; x  System.out.println("The 1st set of random numbers:");6 @9 S5 a  b& Y- _* u9 @: P/ i: a( a
  System.out.println("\t Integer:"+ran1.nextInt());
- ]% w+ H- }8 N" S) x8 w' s) g* g  System.out.println("\t Long:"+ran1.nextLong());
; x  y' @" T, d; `  System.out.println("\t Float:"+ran1.nextFloat());' j9 K2 C, |+ ?3 P
  System.out.println("\t Double:"+ran1.nextDouble());
3 I7 f, G* t2 o+ |6 E5 ^  System.out.println("\t Gaussian:"+ran1.nextGaussian());
# J$ \8 k# N6 z5 q0 }5 [- X  //产生各种类型的随机数
+ D/ g/ Y. |6 D* d& Y! s  System.out.print("The 2nd set of random numbers:");
- k6 O. J% Z& a# w! i2 j3 T  for(int i=0;ijava RandomApp; D8 p+ L8 O2 w$ M3 O: W
  The 1st set of random numbers:
9 _/ j$ ~8 `1 X( t6 s/ o6 L- z7 R  Integer:-173899656
+ O( K- t( \) V  Long:8056223819738127077
; E' Z  T& U- v1 P  Float:0.6293638- ~4 Z& t2 k4 R3 C) q
  Double:0.7888394520265607* g3 S% b5 u. j& a8 ]( r7 p
  Gaussian:0.5015701094568733
3 t+ @% m) Y8 l# _( k$ K) i. x8 K$ a  The 2nd set of random numbers:1553932502+ d, c# ]9 z- n1 W6 C
  -20907491358 E2 r( f5 P) D4 I/ i
  -287790814) {2 t8 |; i6 s
  -3559896403 r0 x1 X) a9 T% x+ n( Q
  -7168671862 k3 d9 J& {( a5 f! B+ R
  E:\java01>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 22:04:30 | 显示全部楼层

2011年计算机等级考试二级JAVA学习精华整理(5)

 1.1.1.1.4 向量类Vector  Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中。正如在一开始就提到过,是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,但向量类中提供的大量方法大大方便了用户的使用。- ?4 b( M8 w) M; I3 f: l& C0 |' o* H
  创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。$ a# q" s4 `8 E" S9 \' @
  向量类提供了三种构造方法:
2 u) l! [4 `# n. s5 E, |  public vector()
! ^+ Y5 E! p$ k$ o7 C, {  public vector(int initialcapacity,int capacityIncrement)  X7 ~' h5 K. U, j' M5 f( y
  public vector(int initialcapacity)
, G$ F7 @4 b, Y/ b9 L  使用第一种方法,系统会自动对向量对象进行管理。若使用后两种方法,则系统将根据参数initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时,系统会扩充向量对象的存储容量。参数capacityIncrement给定了每次扩充的扩充值。当capacityIncrement为0时,则每次扩充一倍。利用这个功能可以优化存储。
7 e( q/ K$ R  \8 W  在Vector类中提供了各种方法方便用户使用:3 X' A1 V. y$ }! T/ |2 |
  ■插入功能! h1 A5 d  f! G3 q0 ~
  (1)public final synchronized void addElement(Object obj)
* p$ _7 W5 r& L; g- F  将obj插入向量的尾部。obj可以是任何类的对象。对同一个向量对象,可在其中插入不同类的对象。但插入的应是对象而不是数值,所以插入数值时要注意将数值转换成相应的对象。, M6 w: G* g. }$ d/ }
  例 要插入一个整数1时,不要直接调用v1.addElement(1),正确的方法为:7 a% D( n2 u6 f3 M  v# l
  Vector v1=new Vector();
: e* R3 E' @2 @7 x% ]  Integer integer1=new Integer(1);
1 U, q6 J$ d0 u  v1.addElement(integer1);' h  X, f9 |0 X) x
  (2)public final synchronized void setElementAt(object obj,int index)3 K+ A$ a  B0 V. Z
  将index处的对象设成obj,原来的对象将被覆盖。) P2 u, A5 O/ E9 E/ s5 J
  (3)public final synchronized void insertElementAt(Object obj,int index)8 E% A# t; g' u. m
  在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。
# z' l3 `$ v2 u+ d  ■删除功能* b6 f" k& A- h8 g
  (1)public final synchronized void removeElement(Object obj)
- w' \. G& d% O1 e- F$ H  从向量中删除obj。若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。; a, d% b/ ?; D! q! Z3 A9 B4 h
  (2)public final synchronized void removeAllElement()
4 m9 O  h( v  P5 y3 w0 j  删除向量中所有的对象。
1 T5 S4 Q. N/ b) t& R* G/ p  (3)public final synchronized void removeElementlAt(int index)
; C9 g9 ]' Y* ?3 Q* y7 u: @  删除index所指的地方的对象。$ U- r* D; r7 v7 z' U1 n" |. k
  ■查询搜索功能" r6 E7 D* \; D7 L% e
  (1)public final int indexOf(Object obj)
" u9 v6 @6 c' K- h  从向量头开始搜索obj ,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1。
# C) H, [7 f2 y6 Q' r7 y  (2)public final synchronized int indexOf(Object obj,int index)% O! m; p0 I7 \# M3 c0 W) C
  从index所表示的下标处开始搜索obj。$ ^# V" t7 R( Z: k7 S# `
  (3)public final int lastIndexOf(Object obj)/ j) W' V, v1 b- V) i' A
  从向量尾部开始逆向搜索obj。
: d& C: K8 R" Z. m7 c  (4)public final synchronized int lastIndexOf(Object obj,int index)8 U! b+ z0 {0 \+ d: Q$ x/ Z0 n
  从index所表示的下标处由尾至头逆向搜索obj。
, ^! d" z8 Q2 M  D3 i  (5)public final synchronized Object firstElement()
4 [/ H4 B$ a( I! A$ H0 ]  获取向量对象中的首个obj。: ^$ v- ]9 a, b9 |
  (6)public final synchronized Object lastelement()
; z  n+ M0 d0 d# C  获取向量对象中的最后一个obj。
6 ?" Y6 j; y. }" v) z- S  了解了向量的最基本的方法后,我们来看一下例8.3VectorApp.java。& F& X9 m! d( ^8 f* j$ E' @2 J3 C
  例1.3 VectorApp.java。
# h# V& m8 o; f2 z8 ]/ P  import java.util.Vector;
3 \, Z8 I2 {0 G: |# o  import java.lang.*;//这一句不应该要,但原文如此
9 p* c- i2 p9 H$ h  import java.util.Enumeration;
4 p' I, X# Z) p% b$ W# z  public class VectorApp{% b8 ]( h/ Y/ N, L# v* T+ n
  public static void main(String[] args){5 @; g6 x7 d) _. r
  Vector v1=new Vector();
3 t* N7 N" R& x% U5 {  Integer integer1=new Integer(1);
0 c# p7 h% h/ F( r+ ^" Q, l  v1.addElement("one");
) F5 R4 I8 ^6 Z: W6 }' @" k9 j  //加入的为字符串对象
/ m3 W9 N/ ~# ]! m3 U  v1.addElement(integer1);
- Q, U7 y7 L4 |" i! B  v1.addElement(integer1);" p+ _- \2 a! I( i8 `
  //加入的为Integer的对象
" o- [. j8 k2 S7 ^. k9 K7 l  v1.addElement("two");
; A2 k5 P$ q* y  p3 l' i" _0 }/ Q  v1.addElement(new Integer(2));$ }8 |0 w, w* ]4 w6 E
  v1.addElement(integer1);4 f/ L1 I2 |2 n6 x& H8 B7 R  ^
  v1.addElement(integer1);
& D3 p3 p" z6 `1 P1 D/ \1 w: z  System.out.println("The vector v1 is:\n\t"+v1);: C  z2 M$ D- R9 _5 b* n4 u  U
  //将v1转换成字符串并打印
! d: _4 n' b( n2 q  v1.insertElementAt("three",2);$ z( a1 j% z1 F" n
  v1.insertElementAt(new Float(3.9),3);3 v5 d& d6 l* L3 z" \
  System.out.println("The vector v1(used method insertElementAt()) is:\n\t "+v1);
, I' z7 F6 _- G* M  //往指定位置插入新的对象,指定位置后的对象依次往后顺延
2 |* V- o3 e6 o/ L+ l6 c' ]& C  v1.setElementAt("four",2);
7 d5 S- _4 g( x4 B. t# l( z  System.out.println("The vector v1(used method setElementAt()) is:\n\t "+v1);3 L( K: O9 W' G$ @2 I
  //将指定位置的对象设置为新的对象
9 h, Y2 \+ {* P5 ~  v1.removeElement(integer1);" t7 p% a5 b2 Q/ D
  //从向量对象v1中删除对象integer1由于存在多个integer1所以从头开始
( u0 G2 k1 E" _2 M! z, _, f& i  //找,删除找到的第一个integer1) L( L& l( J# z$ Z3 }$ c5 j
  Enumeration enum=v1.elements();6 V0 y: ^9 z" b; }
  System.out.print("The vector v1(used method removeElement())is:");) X6 u1 F% n# }
  while(enum.hasMoreElements())
, _4 R. h  ^& ]' ^  System.out.print(enum.nextElement()+" ");
6 Q" Z8 h; X$ |% b  System.out.println();
) E4 C3 F, z- o" D  z* d  //使用枚举类(Enumeration)的方法来获取向量对象的每个元素
1 e* B4 Q+ M% V  System.out.println("The position of object 1(top-to-bottom):"
1 W& A; D, e! b7 B* @) ]  + v1.indexOf(integer1));
3 n6 K8 z0 c0 R3 U9 P6 F7 {% G  System.out.println("The position of object 1(tottom-to-top):"
8 a% y8 f% E+ C& i  +v1.lastIndexOf(integer1));
, \7 H7 ]5 Y* v: t( n+ O  //按不同的方向查找对象integer1所处的位置
+ d  l1 i- j5 ~# C, H0 t  v1.setSize(4);% ~+ m: c( M) ]0 Q. C
  System.out.println("The new vector(resized the vector)is:"+v1);
& c$ u) O  `6 X0 y. J3 k' U; N" S  //重新设置v1的大小,多余的元素被行弃& Q" ]  x9 R$ G9 f
  }* M  i0 g) g7 a, n' p) @
  }% n, F' p: o6 n$ @, ]
  运行结果:
+ W; X, m* V3 `/ K  E:\java01>java VectorApp7 K' T1 }. d0 s
  The vector v1 is:! }2 P" ]* F1 s# m8 y# S+ e
  [one, 1, 1, two, 2, 1, 1]9 s8 \+ U3 K3 F" A; f
  The vector v1(used method insertElementAt()) is:" B1 p, B) t- @/ ^
  [one, 1, three, 3.9, 1, two, 2, 1, 1]/ F8 `' k9 u8 ~$ M8 b$ \% ^3 ~
  The vector v1(used method setElementAt()) is:
  A& S8 |0 O* n0 O( v% Q  [one, 1, four, 3.9, 1, two, 2, 1, 1]
# _7 [# e9 d3 p/ E  The vector v1(used method removeElement())is:one four 3.9 1 two 2 1 1
, [' V+ l2 o2 o0 I( @  The position of object 1(top-to-bottom):3( v. a, l' I2 f6 U) D0 w- @
  The position of object 1(tottom-to-top):7
( ~" n0 [3 b- c  The new vector(resized the vector)is:[one, four, 3.9, 1]0 v" i3 A4 ^! e  L6 \$ q
  E:\java01>4 Z8 v) ^0 Y/ Y2 \& p! g' y
  从例1.3运行的结果中可以清楚地了解上面各种方法的作用,另外还有几点需解释。
; e) ^8 p# Z  J9 ^% t8 z% `# ~  (1)类Vector定义了方法
7 W' x/ I. J0 q  C1 T, z9 C  I/ ?  public final int size()
$ [$ S% }* H5 q  此方法用于获取向量元素的个数。它的返回值是向是中实际存在的元素个数,而非向量容量。可以调用方法capactly()来获取容量值。
4 f9 W' A0 I# e. `% N9 X0 j  方法:, Y3 r7 ^# r; L! d1 W4 x, L- o
  public final synchronized void setsize(int newsize)
- d2 {/ K0 f& g6 Z  此方法用来定义向量大小。若向量对象现有成员个数已超过了newsize的值,则超过部分的多余元素会丢失。* c  O6 h" g% R3 k8 t
  (2)程序中定义了Enumeration类的一个对象- D: @3 J. Z# f+ m6 r5 D
  Enumeration是java.util中的一个接口类,在Enumeration中封装了有关枚举数据集合的方法。  `/ O9 L4 f" V0 c2 _
  在Enumeration中提供了方法hawMoreElement()来判断集合中是束还有其它元素和方法nextElement()来获取下一个元素。利用这两个方法可以依次获得集合中元素。/ M( d% Z: ]1 R/ S0 F& C$ V
  Vector中提供方法:" V) B: `& G+ j( Q' f! T
  public final synchronized Enumeration elements()+ `  o3 C* V( v$ N; K
  此方法将向量对象对应到一个枚举类型。java.util包中的其它类中也大都有这类方法,以便于用户获取对应的枚举类型。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 22:04:31 | 显示全部楼层

2011年计算机等级考试二级JAVA学习精华整理(5)

 1.1.1.1.5 栈类Stack  Stack类是Vector类的子类。它向用户提供了堆栈这种高级的数据结构。栈的基本特性就是先进后出。即先放入栈中的元素将后被推出。Stack类中提供了相应方法完成栈的有关操作。  ?# N7 @" ~+ V, x
  基本方法:0 U3 m- P! t! M" c' `9 w
  public Object push(Object Hem)
; _$ _. t' t8 v4 \; k7 M  将Hem压入栈中,Hem可以是任何类的对象。
& _3 m7 N  d7 F8 M  public Object pop()
. j) B! U8 W. t: ?8 g" h0 n3 X  弹出一个对象。
/ d0 ?+ _! O$ j8 Q) ~  public Object peek()
: a7 U1 T. q, a: ~  T6 w  返回栈顶元素,但不弹出此元素。' D, ?* g( i' g8 }
  public int search(Object obj)
  M# G4 H$ _1 c4 Q  搜索对象obj,返回它所处的位置。
# O, M1 e6 [5 ^( r  public boolean empty()1 Q. n' w! g+ b' E
  判别栈是否为空。0 G% |8 g! T$ F+ E8 ^
  例1.4 StackApp.java使用了上面的各种方法。# ]8 |/ X6 c7 F  w3 ~( q0 `5 J& t3 V% m
  例1.4 StackApp.java。
7 o9 n( |  Y9 ?5 z  import java.lang.*;
. C! j: z$ Z6 s. {+ H4 E  import java.util.*;
, |9 |2 n2 ^. x/ y+ q4 X  public class StackApp{
, u" Y) y3 f$ b% w) P2 j  public static void main(String args[]){# ?9 R5 m8 E: A. R+ n
  Stack sta=new Stack();! C1 f; W/ b) x& J2 G# ?
  sta.push("Apple");( y; l" G% ~' K+ c) N, W
  sta.push("banana");
# g, _- t& s2 J  [  sta.push("Cherry");
# k! N" h4 a4 e% k* }) _  //压入的为字符串对象
' |' [5 w! K0 d* G) H! n7 W  sta.push(new Integer(2));3 c/ ^# Y% I. X% |$ Z& N. k3 I+ B
  //压入的为Integer的对象,值为22 U& Y( q3 a/ x' v
  sta.push(new Float(3.5));
5 G  f8 ?# o6 c+ i, K( x  //压入的为Float的对象,值为3.52 }2 x' D8 Z# L, [0 _7 r
  System.out.println("The stack is,"+sta);3 l% `7 F% b" K
  //对应栈sta4 n! R1 R7 D* g9 {6 ~8 _" B) E
  System.out.println("The top of stack is:"+sta.peek());
" E' e6 m: J, _: T4 ]  //对应栈顶元素,但不将此元素弹出0 X9 b$ r% p% E9 I" z
  System.out.println("The position of object Cherry is:"0 n* r! s( ]& @' K2 R
  +sta.search("cherry"));
' s; F- v0 q# x& |  //打印对象Cherry所处的位置
8 m  q1 K. \3 D( a  System.out.print("Pop the element of the stack:");6 @( U0 x: [: L) n
  while(!sta.empty())+ ^9 O' p! T' j5 |" d9 r$ N+ ]
  System.out.print(sta.pop()+" ");
, k7 i1 C" z6 w2 x# J  System.out.println();
: l/ |1 _3 W  E3 ]' R  //将栈中的元素依次弹出并打印。与第一次打印的sta的结果比较,可看出栈0 ~* A" U% p" Y. a" b; w
  //先进后出的特点/ i- K. V% S# U- g2 K
  }( L  T( N, B$ ~1 c* p- F3 l
  }# R- M1 l- u( @* s; q
  运行结果(略)
2 B2 c! E9 h/ H: b( q  1.1.1.1.6 哈希表类Hashtable
, Z- i2 t1 Q9 u) b  哈希表是一种重要的存储方式,也是一种常见的检索方法。其基本思想是将关系码的值作为自变量,通过一定的函数关系计算出对应的函数值,把这个数值解释为结点的存储地址,将结点存入计算得到存储地址所对应的存储单元。检索时采用检索关键码的方法。现在哈希表有一套完整的算法来进行插入、删除和解决冲突。在Java中哈希表用于存储对象,实现快速检索。4 ^6 W0 j6 [  e8 W% _
  Java.util.Hashtable提供了种方法让用户使用哈希表,而不需要考虑其哈希表真正如何工作。
& ]/ y# X$ ~# M; Q) f  哈希表类中提供了三种构造方法,分别是:
) g  P7 v1 Z! M6 q0 P( ?/ w  public Hashtable()% k4 u5 Z: s2 T8 S. S8 m
  public Hashtable(int initialcapacity)
! `6 R/ }. j) `  public Hashtable(int initialCapacity,float loadFactor). b& o/ Y2 e: D1 `  c/ P( J3 J5 Z3 E
  参数initialCapacity是Hashtable的初始容量,它的值应大于0。loadFactor又称装载因子,是一个0.0到0.1之间的float型的浮点数。它是一个百分比,表明了哈希表何时需要扩充,例如,有一哈希表,容量为100,而装载因子为0.9,那么当哈希表90%的容量已被使用时,此哈希表会自动扩充成一个更大的哈希表。如果用户不赋这些参数,系统会自动进行处理,而不需要用户操心。0 b7 q, N- E9 D3 ?6 r. w: S) w
  Hashtable提供了基本的插入、检索等方法。
# a# M1 W/ ?* n; H+ [  ■插入
7 C2 w. `0 w9 ]" D/ h  public synchronized void put(Object key,Object value)
9 o0 B: _  c% A) n0 m' A9 {  给对象value设定一关键字key,并将其加到Hashtable中。若此关键字已经存在,则将此关键字对应的旧对象更新为新的对象Value。这表明在哈希表中相同的关键字不可能对应不同的对象(从哈希表的基本思想来看,这也是显而易见的)。% Z7 N) s$ O6 D! ^6 r1 O4 R8 D
  ■检索& I/ [) i  N" t6 p
  public synchronized Object get(Object key)* ^3 p3 i+ P3 x9 u  _% \% r
  根据给定关键字key获取相对应的对象。
; J2 {2 g, Z8 n  F. i  public synchronized boolean containsKey(Object key)* ?" K. \* y  F* K& L1 d
  判断哈希表中是否包含关键字key。! d4 y+ N2 p0 c) F  y0 o
  public synchronized boolean contains(Object value)
) t/ n* Z* f* N. H  判断value是否是哈希表中的一个元素。
3 v5 g& Z2 A$ t  ■删除; Z. j/ v1 Z4 ~) Y6 d* c8 G; E
  public synchronized object remove(object key)
3 w* q* ?# ^. L* K2 ~& l0 j  从哈希表中删除关键字key所对应的对象。
" o) t0 Z: r& v; q! C' n  public synchronized void clear()) A' Z* D! B7 X% a+ r
  清除哈希表5 l: s, d- ]' v. U# F$ n  l% j* i
  另外,Hashtalbe还提供方法获取相对应的枚举集合:5 g7 u0 F7 M0 \$ t# I
  public synchronized Enumeration keys()7 s7 l3 P9 Q& Z% h* u! t" N
  返回关键字对应的枚举对象。4 n* V7 P+ X; c
  public synchronized Enumeration elements()
* o% Q  _4 |& f( m& z% U4 w  返回元素对应的枚举对象。4 k+ Z- q6 S4 P
  例1.5 Hashtable.java给出了使用Hashtable的例子。
) A( [7 q6 k" z! {; s  例1.5 Hashtalbe.java。
- R# U- X7 W" D  //import java.lang.*;
) S6 \+ f1 ^3 o0 n5 j  import java.util.Hashtable;0 s# u1 W1 B. A/ {5 w, i
  import java.util.Enumeration;) e' B8 j6 w$ K
  public class HashApp{! ~. o0 p7 v4 j2 i' H% l. y
  public static void main(String args[]){
3 G, D4 R" L" J3 u  Hashtable hash=new Hashtable(2,(float)0.8);
5 l( ]1 G$ S  _$ \( u% y' T+ @  //创建了一个哈希表的对象hash,初始容量为2,装载因子为0.8( J2 S1 Q# A- P) Y8 Z
  hash.put("Jiangsu","Nanjing");
8 h4 K* o( a, Y: r% M  //将字符串对象“Jiangsu”给定一关键字“Nanjing”,并将它加入hash; i  ?8 o% Z7 p, x3 X! w' n
  hash.put("Beijing","Beijing");# O% k  H6 v* E- R7 C" K8 Y* K8 b
  hash.put("Zhejiang","Hangzhou");
2 c2 X6 a6 F9 u( H1 N0 ^7 {& I5 X  System.out.println("The hashtable hash1 is: "+hash);
1 ]# f- E3 T. x: K% @6 q( k0 n! U  System.out.println("The size of this hash table is "+hash.size());
! T' g+ @4 A) g& F- ~8 o  //打印hash的内容和大小; A6 s5 f) l' s! Y1 o/ N, M% F
  Enumeration enum1=hash.elements();
6 p5 e7 p" L4 Z% m& C  System.out.print("The element of hash is: ");
8 t, s; ]0 O; g# A2 D7 i2 S* t  while(enum1.hasMoreElements())5 a+ _$ i2 J& ^, E, b2 Z: J
  System.out.print(enum1.nextElement()+" ");
7 Q8 A& a0 e, D2 H# H5 _' _: U( V  System.out.println();" \" Y4 y- `4 K6 Q9 L
  //依次打印hash中的内容
) i- ~2 J0 p  f. R; \( e  if(hash.containsKey("Jiangsu"))
1 Z& A3 O5 U4 z2 ?# u. c$ ?  System.out.println("The capatial of Jiangsu is "+hash.get("Jiangsu"));5 D( r, }$ q$ j! F
  hash.remove("Beijing");- k! [6 `7 F6 L2 D
  //删除关键字Beijing对应对象
5 ~: W3 V# Z* _! u4 G; g  System.out.println("The hashtable hash2 is: "+hash);
/ b% ^  D6 ]& x5 r  System.out.println("The size of this hash table is "+hash.size());& U* d. V; Y9 y8 C, H- l
  }+ ~/ |2 d! ^3 G" m/ z$ h0 ]
  }" t( C  X! `6 o' J0 h$ f# c
  运行结果:7 ]/ ^- v+ q9 e( O" B0 u" O1 j
  The hashtable hash1 is: {Beijing=Beijing, Zhejiang=Hangzhou, Jiangsu=Nanjing}
# w! d) R% q1 x. `5 r  The size of this hash table is 36 h+ i8 o/ k$ V: p7 F, D/ X
  The element of hash is: Beijing Hangzhou Nanjing0 W$ Y# B* b9 w' c1 C* A
  The capatial of Jiangsu is Nanjing
* z  ]6 ?" k# ~+ V) w* }5 a! Q* L$ I  The hashtable hash2 is: {Zhejiang=Hangzhou, Jiangsu=Nanjing}' v  A( _* \; t/ U$ F% g
  The size of this hash table is 2
$ M# Y4 p+ r2 k1 O- a5 H  Hashtable是Dictionary(字典)类的子类。在字典类中就把关键字对应到数据值。字典类是一个抽象类。在java.util中还有一个类Properties,它是Hashtable的子类。用它可以进行与对象属性相关的操作。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 22:04:32 | 显示全部楼层

2011年计算机等级考试二级JAVA学习精华整理(5)

 1.1.1.1.7 位集合类BitSet  位集合类中封装了有关一组二进制数据的操作。& E- g0 c/ F$ M  @: K
  我们先来看一下例8.6 BitSetApp.java。% A8 ?7 P) R( P! O. k$ h
  例8.6 BitSetApp.java
& G, B" A3 [1 h  F/ i! j  //import java.lang.*;
+ I% y6 O2 \+ z  import java.util.BitSet;; c8 _1 V% Z- c1 j
  public class BitSetApp{
1 u0 R+ h9 k/ a# I* m  N) _% x4 L  private static int n=5;( w2 L7 t$ W! s% a% M7 U# ?
  public static void main(String[] args){
( [" L. z' y5 S5 J' b, B  BitSet set1=new BitSet(n);8 l1 W. \3 y" {- n9 t9 C5 D
  for(int i=0;i; }4 g# m$ z- _: S* ?+ g
  //将set1的各位赋1,即各位均为true: }( A. F0 O9 C5 v
  BitSet set2= new BitSet();* B) m# J! T; }5 ~+ ?
  set2=(BitSet)set1.clone();
+ v, M8 I# `) h/ M  //set2为set1的拷贝
$ [" e" t" z9 }: {1 ^  set1.clear(0);& y2 L0 Z( z( e% K) c- |9 t+ j6 E0 ^0 i
  set2.clear(2);/ E  q; t9 v  j; G& s6 w
  //将set1的第0位set2的第2位清零4 L$ _  L3 f( j- _9 t: ]
  System.out.println("The set1 is: "+set1);7 c' A* M& {$ ]
  //直接将set1转换成字符串输出,输出的内容是set1中值true所处的位置2 ?. g: R. J: j! C% Q0 ^1 r
  //打印结果为The set1 is:{1,2,3,4}
) f) a2 U8 X; r3 m! F/ x! c  System.out.println("The hash code of set2 is: "+set2.hashCode());
/ K4 d! n/ N, s  //打印set2的hashCode
8 U! y4 g) ^5 Z  printbit("set1",set1);
2 G& K" E- k/ w3 g- P! n/ Z9 h  printbit("set2",set2);
. Q8 Q6 V4 A& j, u  //调用打印程序printbit(),打印对象中的每一个元素
% y0 p& r  l' z$ e  //打印set1的结果为The bit set1 is: false true true true true
# M  }* G9 P9 _0 E9 D3 B  set1.and(set2);
2 \" O# ~' m+ W  printbit("set1 and set2",set1);' }+ V- @! s0 e; X" U
  //完成set1 and set2,并打印结果
  {0 H! g, u+ z2 U) ]8 H  set1.or(set2);6 u6 s9 k' `2 R+ w- \
  printbit("set1 or set2",set1);
6 z% ?5 y0 A4 j: o. z# O1 V; a+ ?  //完成set1 or set2,并打印结果* T6 T7 Q7 ~$ l* `+ x) |
  set1.xor(set2);
! Q2 }) k' S3 H, o" u1 q; b" n  printbit("set1 xor set2",set1);  L7 l- h5 ^: c
  //完成set1 xor set2,并打印结果
% I8 O2 X( R( ~4 L; S* j  }
2 n' Z* C" y3 M# [/ d) P. t; o  //打印BitSet对象中的内容
5 j8 v: A7 y% s# o. z2 X$ `1 ]* u* `  public static void printbit(String name,BitSet set){
; {8 I6 ^9 \7 n  System.out.print("The bit "+name+" is: ");$ Q. f9 N/ p- G8 [/ A5 ~
  for(int i=0;i' @- u  _0 j  y* {9 H; o* b
  System.out.print(set.get(i)+" ");& h$ p# n' Y1 @" p! s9 P. k1 S7 T
  System.out.println();
+ F& ^) o2 z3 m7 b0 L! }( D  }
' N- `8 [3 w- T" @5 I! e  }
8 p( Y0 @; J5 s3 f  K% [2 o! t  运行结果:
% B* n4 t) [2 q1 X2 m, U  The set1 is: {1, 2, 3, 4}% ^) x2 [6 o$ W
  The hash code of set2 is: 12252 G9 [) V5 k" C/ H3 a6 s1 t
  The bit set1 is: false true true true true1 G) ^, S. U( V9 W' ?8 |- q
  The bit set2 is: true true false true true
0 v+ X: F& z: i  The bit set1 and set2 is: false true false true true$ S, a9 P$ W. o/ c- m
  The bit set1 or set2 is: true true false true true. m9 a/ `$ F$ v; J' Z8 C
  The bit set1 xor set2 is: false false false false false5 P. {8 I6 ]' ^3 R+ Y/ A$ l
  程序中使用了BitSet类提供的两种构造方法:: T* M4 ^8 F" `5 p
  public BitSet();
+ e: N  }! H  _  H& k  S  public BitSet(int n);8 ~. _/ Q( V& I
  参数n代表所创建的BitSet类的对象的大小。BitSet类的对象的大小在必要时会由系统自动扩充。' C* r2 }1 E3 Q' s
  其它方法:
- J% l8 S7 x& Z1 w0 ]' q  public void set(int n)+ X& y9 F9 ~. `& S" v# l0 K# w
  将BitSet对象的第n位设置成1。4 m$ G- H! v, l6 M& e/ K; c
  public void clear(int n)& @- M9 D( ~" N8 o- o0 n
  将BitSet对象的第n位清零。5 t" {1 w. b8 T, c1 v: c  }3 m+ I
  public boolean get(int n)0 g9 l. z# N5 ^& f" I( X4 U
  读取位集合对象的第n位的值,它获取的是一个布尔值。当第n位为1时,返回true;第n位为0时,返回false。. Q& D! o, W, f
  另外,如在程序中所示,当把一BitSet类的对象转换成字符串输出时,输出的内容是此对象中true所处的位置。( @) |+ w9 `, v
  在BitSet中提供了一组位操作,分别是:& J( T7 Z6 A* O7 H
  public void and(BitSet set)! b3 `5 _0 c4 r! [& W$ b& a
  public void or(BitSet set)' [" t. \% Y+ N/ @
  public void xor(BitSet set)
; P' _4 p1 I5 ^. n3 o! s; H: |  利用它们可以完成两个位集合之间的与、或、异或操作。
' a5 U( q+ d, K; I3 ?  BitSet类中有一方法public int size()来取得位集合的大小,它的返回值与初始化时设定的位集合大小n不一样,一般为64。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-19 09:49 , Processed in 0.474582 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表