读书人

关于 Java Collections API 您不知道的

发布时间: 2013-10-30 12:56:21 作者: rapoo

关于 Java Collections API 您不知道的 5 件事,第 2 部分
java.util 中的 Collections 类旨在通过取代数组提高 Java 性能。 如您在 第 1 部分中了解到的,它们也是多变的,能够以各种方式定制和扩展,帮助实现优质、简洁的代码。

Collections 非常强大,但是很多变:使用它们要小心,滥用它们会带来风险。

1. List 不同于数组

Java 开发人员常常错误地认为 ArrayList 就是 Java 数组的替代品。 Collections 由数组支持,在集合内随机查找内容时性能较好。 与数组一样,集合使用整序数获取特定项。 但集合不是数组的简单替代。

要明白数组与集合的区别需要弄清楚顺序 和位置 的不同。 例如,List 是一个接口,它保存各个项被放入集合中的顺序,如清单 1 所示:

清单 1. 可变键值
import java.util.*;

public class OrderAndPosition {
public static <T> void dumpArray(T[] array) {
System.out.println("=============");
for (int i=0; i<array.length; i++)
System.out.println("Position " + i + ": " + array[i]);
}

public static <T> void dumpList(List<T> list) {
System.out.println("=============");
for (int i=0; i<list.size(); i++)
System.out.println("Ordinal " + i + ": " + list.get(i));
}

public static void main(String[] args) {
List<String> argList = new ArrayList<String>(Arrays.asList(args));

dumpArray(args);
args[1] = null;
dumpArray(args);

dumpList(argList);
argList.remove(1);
dumpList(argList);
}
}

当第三个元素从上面的 List 中被移除时,其 “后面” 的各项会上升填补空位。 很显然,此集合行为与数组的行为不同(事实上,从数组中移除项与从 List 中移除它也不完全是一回事儿 — 从数组中 “移除” 项意味着要用新引用或 null 覆盖其索引槽)。

2. 令人惊讶的 Iterator!

无疑 Java 开发人员很喜爱 Java 集合 Iterator,但是您最后一次使用 Iterator 接口是什么时候的事情了? 可以这么说,大部分时间我们只是将 Iterator 随意放到 for() 循环或加强 for() 循环中,然后就继续其他操作了。

但是进行深入研究后,您会发现 Iterator 实际上有两个十分有用的功能。

读书人网 >编程

热点推荐