Java进阶 - [1-5] 集合容器
ArrayList
add
1、先确认是否需要扩容,如果需要,则进行扩容操作ensureExplicitCapacity。
2、进行赋值 elementData[size++] = e;
扩容
1、如果所需的最小容量大于elementData数组的容量,则进行扩容操作。
private void ensureExplicitCapacity(int minCapacity){
/* 变化次数加1 */
modCount++;
/* 如果所需的【最小容量】大于elementData数组的容量,则进行扩容操作 */
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
2、第一次扩容,扩容原有容量的一半(比如原有为10,扩容后容量为15)。
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
// 第一次扩容,扩容原有容量的一半(比如原有为10,扩容后容量为15)。
int newCapacity = oldCapacity + (oldCapacity >> 1);
// 新的长度newCapacity依然无法满足需要的最小扩容量minCapacity,则新的扩容长度为minCapacity
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
// 新的长度newCapacity超出了最大的数组长度MAX_ARRAY_SIZE,则申请更大的容量hugeCapacity()
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// 扩展数组长度为newCapacity,并且将旧数组中的元素赋值到新的数组中
elementData = Arrays.copyOf(elementData, newCapacity);
}
3、如果新扩容长度无法满足所需空间,则申请更大的容量
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
LinkedList
HashMap
— 要养成终生学习的习惯 —
Java进阶 - [1-5] 集合容器的更多相关文章
- Java进阶知识点:并发容器背后的设计理念
一.背景 容器是Java编程中使用频率很高的组件,但Java默认提供的基本容器(ArrayList,HashMap等)均不是线程安全的.当容器和多线程并发编程相遇时,程序员又该何去何从呢? 通常有两种 ...
- 【Java进阶】---map集合排序
map集合排序 这篇文章讲的不仅仅是map排序,比如把对象按某一属性排序,它都可以解决这些问题. 比如,有N个对象,每个对象有个属性就是成绩,成绩分:优秀,良好,合格.那我们如何按 ...
- Java进阶学习之集合与泛型(1)
目录 1.集合 1.1.集合是什么 1.2.集合框架结构 1.2.1.Collection 1.2.2.Map 1.3.集合接口实现类 1.3.1.LinkedList 1.3.2.ArrayList ...
- java进阶(31)--TreeSet集合、TreeMap集合、自平衡二叉树
一.TreeSet集合简单 1.TreeSet集合底层是一个TreeMap 2.TreeMap集合底层是一个二叉树 3.放到TreeSet集合的元素等同于放到TreeMap集合的Key部分 4.Tre ...
- java进阶(29)--HashMap集合
一.HashMap简介 1.HashMap底层是哈希表结构,类似字典,初始化如下: 2.哈希表结构: 是一个数组+单向链表的结构体 数组:查询效率较高,随机增删效率很低 单向链表:在随机增删方面效率较 ...
- java面试:java基础、Io、容器
1.java基础 1.JDK 和JRE有什么区别 JDK:java开发工具包,java开发运行环境.包含了JRE. JRE:java运行环境,包含java虚拟机,java基础类库. 2.jav ...
- Java集合容器简介
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...
- JAVA中的集合容器操作类
目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...
- [转载]Java集合容器简介
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...
- Java进阶学习(3)之对象容器(下)
对象数组 对象数组中的每个元素都是对象的管理者而非对象本身 对象数组的for—each循环 集合容器(HashSet) HashSet 数学中的集合,元素间满足互异性.确定性.无序性 HashSet& ...
随机推荐
- PM-数据治理中,常用的术语解释
1 指标 是表征和评价一项或多项经营活动业务绩效的指示.指标由指标名称和指标数值两部分组成,指标名称及其涵义体现指标在质和量方面的规定性,指标数值反映指标在具体对象在特定时间.空间.条件下的数量表现. ...
- 详解AQS二:ReentrantLock公平锁原理
ReentrantLock作为我们使用频率最高的显式锁,它是AQS的经典实现,本篇文章将以ReentrantLock公平锁为例讲解AQS的实现. 一.ReentrantLock 在之前的文章<线 ...
- 聊一聊 C#线程池 的线程动态注入 (上)
一:背景 1. 讲故事 在线程饥饿的场景中,我们首先要了解的就是线程是如何动态注入的?其实现如今的ThreadPool内部的实现逻辑非常复杂,而且随着版本的迭代内部逻辑也在不断的变化,有时候也没必要详 ...
- debian 安装后需做的几件事
debian 安装后需做的几件事 安装环境:X86 >> Debian 9 Linux/GNU apt源更新 注意连上有线网络刚安装好的debian系统中,/etc/apt/sources ...
- Qt音视频开发46-视频传输UDP版
一.前言 上篇文章写道采用的TCP传输视频,优缺点很明显,优点就是不丢包,缺点就是速度慢,后面换成UDP通信,速度快了很多,少了3次握手,而且在局域网中基本上不丢包,就算偶尔丢包,对于一秒钟25-30 ...
- 编译Ubuntu 24.04 LTS 内核(BuildYourOwnKernel)
1.配置环境 修改apt源 修改 /etc/apt/sources.list.d/ubuntu.sources ,添加 "deb-src"到 Types:,修改后的文件内容如下: ...
- Solution -「GLR-R4」芒种
\(\mathscr{Description}\) Link, 懒得概括题意.jpg \(\mathscr{Solution}\) Subtask 1 \((n,m\le2)\) 一共只有五种 ...
- Solution Set -「LOCAL」冲刺省选 Round XXXI
\(\mathscr{Summary}\) 前期节奏太懒散,后面发现 C 题是水题都没时间写,提起精神来啊! A 题卡得比较久,对线性基的理解不够深刻,思来想去半天才把转移系数调对.B 题也卡 ...
- Protocol Buffer 使用-copy
概述Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关. ...
- 强力工具助你一臂之力:XXECheck–全面提升XML安全,防护XXE漏洞!
泷羽Sec-track XXECheck XXECheck 是一种用于检测和防止 XML 外部实体 (XXE) 注入攻击的安全工具或库,一款XXE漏洞检测工具,支持 DoS 检测(DoS 检测默认开启 ...