《JavaTM程序设计语言基 础》第 2 部分
第 5 课:集合

[<<后退] [内容] [下一课>>]

集合是一种包含其它对象并提供对所包含对象的操作方法的对象。集合可由同 一类型的对象组成,也可包含不同类型的对象。

本课利用 第2部分、第2课:再谈用户界面中的 RMIClient2 程序来运用集合应用编程接口(API),以保留并打印特有客户 ID 的列表。客户 ID 都是 String 型的对象,表示的是同一类型的信息 - 客户 ID。 不过,如果有必要,您的应用程序中可以拥有一个包含 StringIntegerDouble 型对象的集合对象。


关于集合

可在程序中使用的集合类用于实现集合接口。接口是使集合独立于其表现形式 进行操作的抽象数据类型。 有三种基本类型的集合接口:ListSetMap。本课重点阐述 ListSet 集合。

Set 的实现方法不允许出现重复单元,而 List 的实现方法则允许。重复单元具有相同的数据类型和值。例如,两个包含 Zelda 值的 String 型客户 ID 是重复单元;而一个包含值 1String 型单元与一个包含值 1 的 Integer 型单 元则不是重复单元。

API 提供两种通用的 Set 实现方法:把信息单元存放到一个散 列表中的 HashSet 和把其信息单元存放到被称为红黑树 (red-black tree)的平衡二叉树中的 TreeSet。本课示例程序采 用 HashSet 实现方法,因为它是目前效果最好的实现方法。

下图右侧显示了集合接口,左侧显示的是 java.util.HashSet 的类层次结构。从图中可以看到,HashSet 类实现了 Set 接口。

创建集合

本示例程序采用 RMIClient2.java 类收集 Set 中的客户 ID,并随时在 View 按钮被点 击时打印出客户 ID 的列表。

集合对象是一个 Set,所以即使同一个客户进入多个订单,他在 客户 ID 列表中的单元也只有一个。如果程序试图添加一个已存在于集合中的单元 ,添加操作将不会成功。此时不会出现抛出错误,也不需要您对程序代码进行改变 。

在订单处理人员点击 View 按钮时,RMIClient2.actionPerformed 方法会调用 addCustomer 方法来向集合中添加客户 ID。

以下的 addCustomer 方法是把客户 ID 添加到集合中并打印输 出有关“客户 ID 已成功添加”信息的通知。

//Create list of customer IDs
  public void addCustomer(String custID){
    s.add(custID);
    System.out.println("Customer ID added");
  }

打印

当订单处理人员点击 View 时,就会从 RMIClient2.actionPerformed 调用 print 方法。而 print 方法则把集合中的现有 单元输出到命令行。


注意:HashSet HashSet 并不保证集合中单元的 顺序。单元都按它们在集合的产生顺序打印输出,但该顺序并不一定与单元存放到 集合中时的顺序相同。

若要在集合中遍历操作,就需要从集合中返回一个 Iterator 类 型的对象。Iterator 对象有一个用于测试集合中是否有其它单元的 hasNext 方法、一个用于在集合中不同单元间移动的 next 方法和 一个用于删除某个单元的 remove 方法。

示例中的打印方法提供两种打印输出集合的方法。第一种方法是采用迭代程序 (iterator),另一种方法是对集合调用 System.out.println 方 法。使用迭代程序法时,next 方法所返回的单元都将输出到命令行 ,直到集合中 没有单元为止。

//Print customer IDs
  public void print(){
  //Iterator approach
    if(s.size()!=0){
      Iterator it = s.iterator();
      while(it.hasNext()){
          System.out.println(it.next());
      }
  //Call System.out.println on the set
      System.out.println(s);
    }else{
      System.out.println("No customer IDs available");
    }
  }

更多信息

有关集合的详细说明,请参阅 JavaTM 教程 中的 集合部分。

[TOP]

 

常见问答
下载中心
产品简介
 
 
Solaris论坛
 
   
 
null