当前位置: 首页 > news >正文

html5静态网站大数据培训课程

html5静态网站,大数据培训课程,无锡网站网站建设,中国纪检监察报邮发代号1. 概述 关于Java集合的小抄中是这样描述的: 以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。…

1. 概述

关于Java集合的小抄中是这样描述的:

以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。

按数组下标访问元素—get(i)/set(i,e) 的性能很高,这是数组的基本优势。

直接在数组末尾加入元素—add(e)的性能也高,但如果按下标插入、删除元素—add(i,e), remove(i), remove(e),则要用System.arraycopy()来移动部分受影响的元素,性能就变差了,这是基本劣势。

然后再来学习一下官方文档:

Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector, except that it is unsynchronized.)

ArrayList是一个相对来说比较简单的数据结构,最重要的一点就是它的自动扩容,可以认为就是我们常说的“动态数组”。
来看一段简单的代码:

1
2
3
4
5
ArrayList<String> list = new ArrayList<String>();
list.add("语文: 99");
list.add("数学: 98");
list.add("英语: 100");
list.remove(0);

在执行这四条语句时,是这么变化的:
arraylist
其中,add操作可以理解为直接将数组的内容置位,remove操作可以理解为删除index为0的节点,并将后面元素移到0处。

2. add函数

当我们在ArrayList中增加元素的时候,会使用add函数。他会将元素放到末尾。具体实现如下:

1
2
3
4
5
public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

我们可以看到他的实现其实最核心的内容就是ensureCapacityInternal。这个函数其实就是自动扩容机制的核心。我们依次来看一下他的具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
        minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    }

    ensureExplicitCapacity(minCapacity);
}

private void ensureExplicitCapacity(int minCapacity) {
    modCount++;

    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
        grow(minCapacity);
}

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    // 扩展为原来的1.5倍
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    // 如果扩为1.5倍还不满足需求,直接扩为需求值
    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);
}

也就是说,当增加数据的时候,如果ArrayList的大小已经不满足需求时,那么就将数组变为原长度的1.5倍,之后的操作就是把老的数组拷到新的数组里面。例如,默认的数组大小是10,也就是说当我们add10个元素之后,再进行一次add时,就会发生自动扩容,数组长度由10变为了15具体情况如下所示:
arraylistadd

3 set和get函数

Array的put和get函数就比较简单了,先做index检查,然后执行赋值或访问操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
public E set(int index, E element) {
    rangeCheck(index);

    E oldValue = elementData(index);
    elementData[index] = element;
    return oldValue;
}

public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}

4 remove函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public E remove(int index) {
    rangeCheck(index);

    modCount++;
    E oldValue = elementData(index);

    int numMoved = size - index - 1;
    if (numMoved > 0)
        // 把后面的往前移
        System.arraycopy(elementData, index+1, elementData, index,
                         numMoved);
    // 把最后的置null
    elementData[--size] = null; // clear to let GC do its work

    return oldValue;
}

注释很清楚:

Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).

参考资料

Class ArrayList
ArrayList其实就那么一回事儿之源码浅析

关于ArrayList

原文链接:http://yikun.github.io/2015/04/04/Java-ArrayList%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/

http://www.lbrq.cn/news/2620297.html

相关文章:

  • 菠菜网站做首存亚洲足球最新排名
  • 网站设计答辩ppt搜索引擎营销
  • 国家城乡住房建设部网站首页seo网站优化方案书
  • 网站设计模块网络营销方式有哪些
  • 申请网站域名空间手机自己怎么建电影网站
  • 专业定制网站制作公司现在推广平台哪家最好
  • 做弹幕网站网站seo查询站长之家
  • 做网站用的字体域名解析查询
  • 广东营销网站制作站长友情链接
  • 嵌入式应用软件开发流程seo竞价排名
  • 网站套餐网页万能搜索网站
  • C#如何做简易网站淘宝关键词优化推广排名
  • 网站建设不完整什么意思武汉百度推广代运营
  • wordpress联系我们网站seo工具
  • 自己做衣服网站抖音推广平台联系方式
  • 北京做网站建设公司哪家好南昌网站优化公司
  • 网站提交做外链有什么作用企业网站seo案例分析
  • 扁平网站设计爱站网关键词排名
  • 做国际网站怎么能快速打开湖南有实力seo优化
  • 购物网站建设开发费用分析文山seo公司
  • 重庆建设局网站短链接生成
  • 高中文凭能学做网站吗数据分析网官网
  • asp access网站建设源代码百度推广账户优化
  • 网站建设与管理2018百度明星人气榜入口
  • 怎么做外贸网站推广今日头条权重查询
  • 特价网站建设费用金华百度seo
  • 网站开发要学哪些知识seo基础
  • 临高网站建设企业网址怎么注册
  • 做网站贵不高清网站推广免费下载
  • 无锡网页设计培训公司百度网站排名优化价格
  • 使用 Tauri 开发 Android 应用:环境搭建与入门指南
  • 基于Python的超声波OFDM数字通信链路设计与实现
  • 【32】C++实战篇—— m行n列的坐标点,求每行相邻点X差值dX,每列相邻点y差值dY,并以矩阵形式左端对齐
  • Nacos配置中心和数据隔离在idea中的实现
  • 企业级Linux服务器安全:防火墙规则配置与Web/SSH服务优化指南
  • Linux系统之Docker命令与镜像、容器管理