java 数据结构. 源码阅读




Collections工具类里的


Collections.synchronizedList


public static <T> List<T> synchronizedList(List<T> list) {
    return (list instanceof RandomAccess ?
                new SynchronizedRandomAccessList<T>(list) :
                new SynchronizedList<T>(list));
    }

##仅仅是通过判断是否实现RandomAccess接口,而返回不同的SynchronizedList(内部)类,

##RandomAccess foreach较快, iterator较慢,差别不明显(如i5上,本人测试,一个ArrayList,90w个object,  foreach出来是6多ms, iterator出来7ms)

##SequenceAccess foreach较慢,iterator较快.差别非常明显. (如i5上,本人测试,一个LinkedList,10w个object,  foreach出来是200多ms, iterator出来仅4ms)



LinkedList的get(n) 方法.   源码里写得也有点妙,一不留意 确实是个坑.    (这是SequenceAccess 的foreach 慢的原因)

private Entry<E> entry(int index) {
        if (index < 0 || index >= size)
            throw new IndexOutOfBoundsException("Index: "+index+
                                                ", Size: "+size);
        Entry<E> e = header;
        if (index < (size >> 1)) {
            for (int i = 0; i <= index; i++)
                e = e.next;
        } else {
            for (int i = size; i > index; i--)
                e = e.previous;
        }
        return e;
    }






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折腾数据折腾代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值