数组是 java 语言内置的数据类型, 他是一个线性的序列, 所有可以快速访问其他的元素, 数组和其他语言不同, 当你创建了一个数组时, 他的容量是不变的, 而且在生命周期也是不能改变的, 还有 JAVA 数组会做边界检查, 如果发现有越界现象, 会报 RuntimeException 异常错误, 所有不用担心和 C 和 C++ 一样不做边界检查而出现的问题, 当然检查边界会以效率为代价, 数组和其他容器体现在 3 个方面: 1. 效率 2. 类型识别 3. 可以持有 primitives.
集合:
JAVA 还提供其他容器, list,map,set, 他们处理对象的时候就好像这些对象没有自己的类型一样, 而是直接归根于 Object, 这样只需要创建一个容器, 把对象放进去, 取出时转换成自己的类型就行了,
ArrayList:JAVA 包里有一个 java.util.ArrayLisy 的类, 他包括可以用以 static 的工具方法, 其中最基本的 4 个方法: 1 用来比较 2 个数组是否相等的 eques()2 用来填充数组的 fill()3 用来排序数组的 sort()4 以及用于在一个已经排序的数组中查找元素的 binarySearch().
这些方法都是对 primitives 和 Object 进行了重载, 此外还有一个 asList() 方法, 它接受一个数组, 然后把它转成一个 List 容器
此为 java 标准库还提供了一个 System.arraycopy(); 的静态方法, 能够以较快的速度拷贝数组, 对 primitive 和 Object 进行了重载, 要注意的是, 当进行 Obeject 拷贝的时候, 进行的是浅拷贝;
区别:
至于效率, 数组无疑是高过其他容器的, 因为有些容器类的实现就是基于数组的, 比如 ArrayList, 不论是效率还是类型检查, 无疑是先考虑数组的, 但是数组最大的弱点就是功能太弱小, 所有才会有其他容器的出现.
来源: http://www.jianshu.com/p/f1628ce838e7