Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息,请参阅JDK发行说明。
Java集合框架的设计目标是确保核心集合接口和在早期Java平台版本中用于表示集合的类型之间的完全互操作性:Vector
、Hashtable
、数组和Enumeration
。在本节中,您将学习如何将旧集合转换为Java集合框架集合,以及反之亦然。
假设您正在使用一个API,该API返回旧的集合,并与另一个要求实现集合接口的API一起使用。为了使这两个API之间能够顺利交互,您需要将旧的集合转换为现代集合。幸运的是,Java集合框架使这一过程变得简单。
假设旧的API返回一个对象数组,而新的API需要一个Collection
。集合框架提供了一个方便的实现,允许将对象数组视为一个List
。您可以使用Arrays.asList
将数组传递给任何需要Collection
或List
的方法。
Foo[] result = oldMethod(arg); newMethod(Arrays.asList(result));
如果旧的API返回一个Vector
或Hashtable
,那么您根本不需要进行任何工作,因为Vector
已经被修改为实现List
接口,而Hashtable
已经被修改为实现Map
接口。因此,可以直接将Vector
传递给任何需要Collection
或List
的方法。
Vector result = oldMethod(arg); newMethod(result);
同样地,Hashtable
可以直接传递给任何需要Map
的方法。
Hashtable result = oldMethod(arg); newMethod(result);
较少见的情况是,一个API可能返回表示对象集合的Enumeration
。Collections.list
方法将Enumeration
转换为Collection
。
Enumeration e = oldMethod(arg); newMethod(Collections.list(e));
假设您正在使用一个返回现代集合的API,并与另一个要求传递旧集合的API一起使用。为了使这两个API之间能够顺利交互,您需要将现代集合转换为旧集合。同样,Java集合框架使这一过程变得简单。
假设新的API返回一个Collection
,而旧的API需要一个Object
数组。如你所知,Collection
接口包含一个专门用于此情况的toArray
方法。
Collection c = newMethod(); oldMethod(c.toArray());
如果旧的API需要一个String
数组(或其他类型的数组)而不是Object
数组呢?你只需使用toArray
的另一种形式,即接受数组作为输入的形式。
Collection c = newMethod(); oldMethod((String[]) c.toArray(new String[0]));
如果旧的API需要一个Vector
,则标准的集合构造函数很方便。
Collection c = newMethod(); oldMethod(new Vector(c));
处理旧的API需要Hashtable
的情况类似。
Map m = newMethod(); oldMethod(new Hashtable(m));
最后,如果旧的API需要一个Enumeration
,该怎么办?这种情况并不常见,但偶尔会发生,因此提供了Collections.enumeration
方法来处理它。这是一个静态工厂方法,它接受一个Collection
并返回该Collection
的元素上的Enumeration
。
Collection c = newMethod(); oldMethod(Collections.enumeration(c));