Array和List的异同

本文对比了Array和List这两种数据结构的特点。Array是基于索引的结构,支持快速读取但删除操作开销较大。List则是一种有序集合,提供按索引访问方式,包括ArrayList和LinkedList两种实现,分别适用于不同场景。

Array和List的异同

Array的创建格式是:类型+[ ]。

eg:String[] array = new String[5];

可以在创建时限定长度,但在后面使用中不可以更改。直接赋值{不适用于二维数组}、引用赋值。只能选其一,且不能重复赋值。可以放基本类型数据和对象。

List创建格式是:类型<泛型> 。

eg:List<String> list = new LinkedList< >();(由于李氏替换原则,所以后面的String可以省略。)

不能在创建时限定长度,但可以在以后的使用中更改。通过:.add(追加)、.set(更改)来赋值。不能放基本类型数据。

Array:

是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据。

List:

是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。

List有两个重要的实现类:ArrayList和LinkedList

ArrayList:

可以看作是能够自动增长容量的数组,利用ArrayList的toArray返回一个数组;Arrays.asList返回一个列表

LinkedList:

相对于ArrayList,LinkedList插入是更快的。因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还需要更新索引(除了插入数组的尾部)。

类似于插入数据,删除数据时,LinkedList也优于ArrayList。

关于LinkedList和ArrayList的选用:

1) 你的应用不会随机访问数据。因为如果你需要LinkedList中的第n个元素的时候,你需要从第一个元素顺序数到第n个数据,然后读取数据。

2) 你的应用更多的插入和删除元素,更少的读取数据。因为插入和删除元素不涉及重排数据,所以它要比ArrayList要快。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值