`

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) {
        args = new String[]{"aaa","bbb","ccc"};
        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 覆盖其索引槽)。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics