【Java集合】ArrayList

概述

         ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。直接使用数组的缺点是数组一旦初始化就无法改变大小,而很多时候我们创建数组时并不知道将要往里面存多少数据,而动态数组就很好的解决了这个问题。

基本操作

        ArrayList除了可以自动扩展数组外,内部还提供来了很多好用的方法,使它比普通数组强大得多,这里随便列出一些,使用时可以查看文档了解所有的方法。

add()

将元素插入到数组最后一个元素后面或指定位置

addAll()

添加集合中的所有元素到数组中

contains()

判断数组是否包含某元素

get()

通过索引值获取元素

remove()

删除单个元素

subList()

截取部分元素

set()

替换指定索引的元素

sort()

对元素进行排序

扩容机制

        ArrayList的扩容机制是它被称为动态数组的原因,ArrayList默认初始容量是10,也可以在创建是指定初始容量的大小,当内部数组大小不满足元素新增需求时,就会触发扩容机制,先创建一个大小为原来1.5倍的数组,将原数组中的元素复制到新数组中,在用新数组代替原数组扩容就完成了。

应用

        作为数组ArrayList天生适合随机查找,不适合随机插入或删除,因为对ArrayList进行随机插入或删除需要对数组进行复制和移动,代价比较高。如果插入或删除只在ArrayList末尾元素进行,则不需要对数组进行复制和移动,这种情况也建议使用ArrayList,而不是LinkedList,LinkedList是基于链表的,只在随机插入或删除较多的情况下有优势。另外ArrayList是不同步的,多线程下使用需做好同步。

Vector向量

        Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免了多线程同时写而引起的不一致性问题,但实现线程同步需要很高的花费,因此,访问它比访问ArrayList更慢,Vector是一个遗留类,可能会被移除,已不建议使用,可以用CopyOnWriteArrayList代替。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值