a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 46|回复: 0

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

[复制链接]
发表于 2012-7-31 22:04:26 | 显示全部楼层 |阅读模式
 1.1.2.3 Collection接口与Iterator接口  Collection接口的实现类跟Vector相似。要从实现了Collection接口的类的实例中取出保存在其中的元素对象,必须通过Collection接口的Iterator()方法,返回一个Iterator接口。6 U: y% b8 E$ R7 o; }# s" j# {7 q
  Iterator接口与Enumeration接口非常相似。该接口的优点是其中的方法名比较简短。) j# N" o: ?7 o- }; s& H1 i  A% K' Y- @
  Arraylist类实现了Collection接口
+ m2 x2 i3 D9 P! C! V! N9 a  例:将上例改写为用ArrayList类和Iterator接口来实现。- x2 e1 g4 w; a6 I
  import java.util.*;
! V( {8 [5 c9 S* H: l) H  public class TestCollection& ?4 Q* j& `$ f2 Q2 z- C
  {
* h5 q- W. h  c3 j  public static void main(String[] args)& x3 e3 g5 i$ Z6 j/ S
  {# B) V, I( H" J
  ArrayList v=new ArrayList();& j" j) i9 {5 d! U
  int b=0;4 ~' j( D" k6 y+ x! G$ z' L" b
  int num=0;
  p) D. v- {3 C9 G4 `  System.out.println("Please enter number:");$ Y. |% D+ f5 k; d1 U( k7 p
  while(true)+ E0 R, e. `' y! v
  {
; w# ~6 \1 h0 V+ l( H+ v7 i+ l  try) p# ], y9 ?$ E8 |
  {
* n6 d, \5 Z4 _& U1 C/ `% l  b=System.in.read();6 Y" V" |( A3 |: d, h( x9 X
  }
4 h! k5 A; Z+ z  catch(Exception e). ~$ z6 t6 q2 R# Y' o- A8 u' {( n
  {
. M3 a# u& V! g( }  S9 r  e.printStackTrace();
6 X3 T/ {2 I$ I8 z( ~' K; Q  }
4 A- @" _: o! K* J+ ^$ K5 v& M7 r  if(b=='\r'||b=='\n')
7 m( f! k: W8 z3 T- L  {
6 l" }6 F" O7 o% L! |! v5 K" {  break;
/ ^- u0 @" z6 g$ x4 r4 n  }
6 K- `4 J8 R( D9 y( h1 ^9 r  else) D: R$ o- J8 V+ x3 i8 H
  {
& b0 d  T5 v4 X% {9 \2 S  num=b-'0';' h3 ~  G9 U# ]: H7 h' C
  v.add(new Integer(num)); //方法为add()而不是addelement()
/ O$ A. s" Y" A6 U  }
9 u, u6 ?& S2 ]( S; Y  }. T9 v" u. S4 g% ^$ i: h
  int sum=0;
3 [. R% Z# p) n3 v- ~! D  Iterator e=v.iterator();
* v8 |; h$ v6 ~# @  while(e.hasNext())//判断是否有数据时,使用的是hasNext()方法
8 M9 L, z) K/ b7 c1 K6 p  {& J; z) V3 O3 S7 l1 V$ g
  Integer intobj=(Integer)e.next(); //取数据时使用next()方法,而不是nextElement()0 r1 g: D9 x1 J1 F) m4 t9 `
  sum+=intobj.intValue();
% r) \$ I! F. ~* L$ q  l  }. V; K4 k( Y9 r$ X
  System.out.println(sum);
3 S9 k" y+ e& K- A) S  }
: {; x" S, A! ~# x( n9 N' ~  }
, S) j: A3 N1 h' i0 N  这两组实现的结果都是一样的,那什么时候使用哪种呢?+ z/ l* L, C, p+ G7 G& ~: V8 k
  Vector类中的所有方法都是线程同步的,所有有两个以上的线程访问并发访问vector对象时,是安全的,但是只有一个线程访问时,仍然存在同步监视器检查的情况,需要额外的开销,影响了效率。而ArrayList中的所有方法是不同步的,所以程序中如果不存在多线程安全的问题,则ArrayList比Vector的效率高。如果存在多线程安全的问题,使用ArrayList要自己编写同步处理,而使用Vector则不要。9 K1 Q6 T4 Q& e( y1 |. c
  Collection,Set,List的区别如下:3 h9 j0 T! d* E1 w2 W1 W4 C# u
  Set,List是Collection的子类。
6 a' y2 d5 I( e2 J: e, B+ N5 D  Collection各元素对象之间没有指定的顺序,允许有重复元素和多个Null元素对象。所以不可以排序,也不可以找出第几个第几个元素。
8 D3 g  H. v% B2 C9 ~, K7 x9 i  x  Set各元素对象之间没有指定的顺序,不允许有重复元素,最多允许有一个Null元素对象。: b+ \+ _+ r$ B
  List各元素对象之间有指定的顺序,允许有重复元素和多个Null元素对象。
  w6 M$ R& a! |! M5 Z  import java.util.*;
' ?) _9 M: L# X. W8 ~0 n( @( D  public class TestSort
. m2 ^; X: z- `+ n( |  {
, h9 Q; m8 t# R( F  public static void main(String[] args)
2 L( c. O& d. @* Z; n  {
8 @# l% P2 W- i: C+ e6 j  ArrayList al=new ArrayList(); //新建一个arraylist ,由于它也实现了list接口,所以可以进行排序
& G9 U9 y  S/ `  al.add(new Integer(1));" f5 y9 z6 @0 a/ r- q
  al.add(new Integer(3));  m1 e2 l5 r3 t5 R5 l" u' Q5 P
  al.add(new Integer(2)); //添加三个数字,随便添加,没有排序2 v% O; Z8 r6 i- k
  System.out.println(al.toString()); //打印9 }2 ?, W, ?# h
  Collections.sort(al); //排序' J& k5 i& Z5 d! K. J
  /*Collections类本身并不是一个集合类,它只是提供了各种方法来操作集合类*/! J$ h4 M5 ]9 E, f( @6 ]
  System.out.println(al.toString());
7 j3 `! }1 G2 \& M! _  }
& T* a' L3 g) _! r- K  }
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 18:01 , Processed in 0.203645 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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