本篇文章只讲数组的优势与局限,若要了解数组的定义可以参考 Java 数组的定义及使用
数组是 Java 语言的基本知识之一,在深入学习 Java 基础后,我们都知道那些容器,在之后,在我们学习、工作的过程中基本就是使用容器了,很少使用数组,那么为什么还要有数组呢?
我们知道数组与其他种类的容器之间的区别有三方面:效率、类型和保存基本类型的能力(自从 jdk1.5 新增泛型后,保存类型的区别已经不大了),下面就通过分析数组的优缺点来解释我们在有容器的情况下,为什么还要使用数组。
数组的优点
- 随机访问的效率很高。根据下标访问元素效率高(元素连续分配空间)
- 数组可以保存若干个数据
数组的缺点
- 数组长度是固定的不能变的,不能自动扩容
- 数组进行元素的删除和插入操作的时候,效率比较低。需要移动大量的元素
- 数组元素的类型只能是一种
- 数组通过内容查找元素的效率是比较低的,需要逐个比较
- 数组的元素是连续分配的,所以在 heap 内存中必须找到连续的内存空间才能容纳数组的所有数据。对内存要求高一些
- 数组没有提供任何的封装,所有对元素的操作,都是通过自定义的方法实现的,对数组元素的操作比较麻烦
总结
-
数组较容器,最大的优点就是效率。在 Java 中,数组是一种效率最高的存储和随机访问对象引用序列的方式,数组就是一个简单的线性序列,这使得元素访问非常快速,无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个(数组)对象用以保存指向其他对象的引用。数组是第一级对象,可以作为数组初始化语句的一部分隐式地创建此对象,或者用 new 表达式显示地创建。
-
数组的优点是效率高,但为此,所付出的代价就是数组对象的大小被固定。这也使得在工作中,数组并不实用。所以我们应该优选容器,而不是数组。只有在已证明性能成为问题的时候,并且确定切换到数组对性能提高有帮助时,才应该将项目重构为使用数组。