java api 接口篇(二)上

http://tech.ddvip.com   2006年11月23日    社区交流

本文详细介绍java api 接口篇(二)上

  Collection视图  

  Collection视图 方法允许以三种方式将一个Map作为一个Collection来视图:

  keySet: 包含在Map中的键的Set。  

  values: 包含在Map中的值的Collection。 该Collection不是一个Set, 因为多个键可映射相同的值。

  entrySet: 包含在Map中的键-值对的Set 。Map接口提供了一个小的被称作Map.Entry的嵌套接口,它是在这个Set中的元素的类型。  

   Collection视图提供了在Map上进行迭代的唯一方法。下面的例子给出了在一个Map上迭代键的标准惯用程序:  

  for (Iterator i=m.keySet().iterator(); i.hasNext(); )
System.out.println(i.next());

   对值进行迭代的惯用程序是类似的。这是迭代键-值对的惯用程序:

for (Iterator i=m.entrySet().iterator(); i.hasNext(); ) {
Map.Entry e = (Map.Entry) i.next();
System.out.println(e.getKey() + ": " + e.getValue());
}
 

   第一次提交这些惯用程序时,许多人考虑到每次调用一个Collection视图时,Map都必须创建一个新的Collection对象,因而担心其速度慢。请放心:这是不可能的。如果每次一个Map被要求给出一个特定的Collection视图时,没有道理Map不能总是返回相同的对象。这恰恰是所有JDK的Map实现所要作的事。  

  用所有三个Collection视图, 调用一个Iterator的remove的操作可从后备Map中删除相关项(假设该Map支持删除)。用entrySet视图, 通过在迭代过程中调用一个Map.Entry的setValue方法 (再一次假设该Map支持值的更改),也可能改变与一个键相关的值。 请注意这是在迭代过程中更改一个Map的唯一安全途径。  

  Collection视图支持它的所有形式的元素删除:remove, removeAll, retainAll, 和clear操作, 以及Iterator.remove操作 (然而,这是建立在假设后备Map支持元素删除的基础之上)。  

责编:豆豆技术应用

正在加载评论...