Java ArrayList 源码分析与提高性能替代方案

自娱自乐,不喜莫喷。目前还是大三狗,错误很多,望大神指正。微笑

    看同学java一用到list全部是ArrayList,但是ArrayList真的万能吗?顾名思义Array==数组,添加,删除肯定要有扩张,收缩操作,会拖慢性能,对于常读的自然没关系,但是有时做信息缓冲区时,添加、删除频繁,ArrayList肯定不好。


先看结果:

不带index的添加:新建ArrayList时数组大小为0;第一次添加时新建一个大小为10的数组,以后不够用时,每次扩大一半,即:10,15,22。。。每逢这些大小,就重建数组然后把源数据拷过来,这是非常不符合缓冲区的要求的。

带index的添加:数组空间不够时即:数组大小为10,15,22。。。时先做一次扩张操作,然后再拷贝一次以完成在目标位置添加,拷贝操作最少一次,最多两次。。。喵喵喵???


java.util.concurrent下有许多集合类,你们可以自己看看,我找到的比较好用的:

ArrayList:数组实现,随机查找,随机读操作非常快,写。。。

LinkedList:链表实现,可以快速增删,顺序读取,缺点时随机读取慢,得遍历一遍,单线程时做缓冲区最适合不过

HashSet:没有重复的无序集合(插入重复元素不会理你)

TreeSet:有序集合(红黑树实现)

HashMap:最常用的map类: transient Node<K,V>[] table;  也是数组实现

linkedHashMap:顾名思义,HashMap的链表实现

weakHashMap:不会增加对象的引用计数,所以gc回收时不会考虑它里面的引用

多线程:java.util.concurrent包下有许多多线程支持的工具,不需要自己加锁来控制哦,自带锁机制ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值