大家都知道数组时属于线性表结构的,很好理解的是线性表就像一条线一样的结构。每个线性表上的数据最多只有前、后两个方向。而除了数组,链表、队列、栈等也是线性表。那么与它对立的概念就是非线性表了,比如:二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简答的前后关系。
那么我们接下来谈谈数组与ArrayList应用场景的选择。
数组是用于储存多个相同类型数据的集合。
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本
ArrayList
- 在这里先说ArrayList,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处
- 相比于数组,Java中的ArrayList封装了数组的很多操作,并支持动态扩容
数组
- Java中ArrayList中无法存储基本数据类型,比如int、long,需要封装为Integer、Long类,而AutoBoxing(装箱)、Unboxing(拆箱)则有一定的性能消耗,所以如果特别关注性能,或者希望使用基本数据类型,就可以选数组。
- 若数据大小实现已知,并且涉及到的数据操作非常简单,可以使用数组
- 表示多维数组时,数组往往更直观
- 业务开发容器即可,底层开发,如网络框架,性能优化。就可以选择数组啦
- 虽然Java中的ArrayList封装了数组的很多操作,并支持动态扩容。但是一旦超过了最大容量,扩容时比较消耗内存,因此涉及到内存申请和数据搬移。这时候数组更适合这个场景
总结
数组和ArrayList各有好坏,只要你根据自己所适合的场景选择合适的数据结构即可。