吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4843|回复: 1
收起左侧

[会员申请] 申请会员ID:Boen_

[复制链接]
吾爱游客  发表于 2019-2-27 17:12
1、申 请 I D :Boen_
2、个人邮箱:1836140285@qq.com
3、原创技术文章:详细分析java中List接口的实现类ArrayList实现方法


话不多说,直奔主题。
查看ArrayList部分源代码(因其太多,只展示必要部分):
[Java] 纯文本查看 复制代码
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};


可见其创建对象即new的时候为Object类型的数组,并且为空。那这个数组是如果装下东西的呢?
在使用add()方法的时候,查看底层源代码:
[Java] 纯文本查看 复制代码
    private void ensureCapacityInternal(int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
        }


发现数组长度即将发生变化--变为10!可是如果使用add方法输入的不止10个,是又如何装下的呢?
继续查询源代码:
[Java] 纯文本查看 复制代码
    private void grow(int minCapacity) {        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }


原来如此如果输入的不止10个的话,将会向右移一位,长度变为15。若是再不够,继续向右移动一位!
因为ArrayList实现类底层是一个Object类型的数组,因此将会有数组的特性---查询修改快,添加删除慢。
其方法我在此就不说了,因为很简单!


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2019-2-28 10:18
抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 12:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表