Vector底层结构和源码分析

简介: Vector底层结构和源码分析

1. Vector 的基本介绍

1) Vector类的定义说明
在这里插入图片描述
2) Vector底层也是一个对象数组, protected Object[] elementData;
在这里插入图片描述
3) Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized

public synchronized E get(int index) {
    if (index > = elementCount)
    throw new ArrayIndexOutOfBoundsException(index);
    return elementData(index);
}    
AI 代码解读
  • 在开发中,需要线程同步安全时,考虑使用Vector
  • 案例:

2. 源码分析

  1. new Vector() 底层
public Vector() {
    this(10);
}
AI 代码解读

补充:如果是 Vector vector = new Vector(8);
走的方法:

public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
AI 代码解读
  1. vector.add(i)

    2.1 下面这个方法就添加数据到 vector 集合

public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
AI 代码解读

2.2 确定是否需要扩容 条件 : minCapacity - elementData.length>0

private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0
    grow(minCapacity);
}
AI 代码解读

2.3 如果 需要的数组大小 不够用,就扩容 , 扩容的算法

//newCapacity = oldCapacity + ((capacityIncrement > 0) ?
//capacityIncrement : oldCapacity); 就是扩容两倍. 
private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
    capacityIncrement : oldCapacity);
    if (newCapacity - minCapacity < 0)
    newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
    newCapacity = hugeCapacity(minCapacity);
    elementData = Arrays.copyOf(elementData, newCapacity);
}
AI 代码解读

3. Vector 和 ArrayList 的比较

在这里插入图片描述

目录
打赏
0
0
0
0
169
分享
相关文章
使用 CSS Grid 布局实现响应式设计
【10月更文挑战第1天】使用 CSS Grid 布局实现响应式设计
187 4
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
155 2
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
318 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
11月前
|
揭秘:如何轻松驾驭Uno Platform,用C#和XAML打造跨平台神器——一步步打造你的高性能WebAssembly应用!
【8月更文挑战第31天】Uno Platform 是一个跨平台应用程序框架,支持使用 C# 和 XAML 创建多平台应用,包括 Web。通过编译为 WebAssembly,Uno Platform 可实现在 Web 上运行高性能、接近原生体验的应用。本文介绍如何构建高效的 WebAssembly 应用:首先确保安装最新版本的 Visual Studio 或 VS Code 并配置 Uno Platform 开发环境;接着创建新的 Uno Platform 项目;然后通过安装工具链并使用 Uno WebAssembly CLI 编译应用;最后添加示例代码并测试应用。
363 0
Android经典实战之窗口和WindowManager
本文介绍了Android开发中“窗口”的基本概念及其重要性。窗口是承载用户界面的基础单位,而`WindowManager`系统服务则负责窗口的创建、更新和移除等操作。了解这些概念有助于开发复杂且用户体验良好的应用。
174 2
Android经典实战之处理后台任务的2个工具
本文介绍Android后台任务管理,涵盖WorkManager与JobScheduler的使用方法及区别。WorkManager属Jetpack库,确保任务可靠执行,支持延迟与条件依赖。JobScheduler则针对特定条件下的任务调度,如网络类型。两者各有优势,WorkManager适用于多数场景。
214 0
TCP连接的关键之谜:揭秘三次握手的必要性
在这篇文章中,我们将深入探讨TCP连接建立过程中的关键步骤——三次握手。三次握手是确保客户端和服务端之间建立可靠连接的重要过程。通过三次握手,双方可以确认彼此的接收和发送能力,并同步双方的初始序列号,从而确保连接的稳定性和可靠性。文章还解释了三次握手的原因,它可以避免历史重复连接的初始化,确保双方都收到可靠的初始序列号,并避免资源浪费和消息滞留的问题。通过三次握手,TCP连接可以保证数据的准确性和完整性,确保通信的可靠性。
297 1
TCP连接的关键之谜:揭秘三次握手的必要性
实战pytorch中utils.data.TensorDataset和utils.data.DataLoader工具
本文主要说明pytorch框架中utils.data.TensorDataset和utils.data.DataLoader两个工具类。
298 0
Jetpack-Compose 学习笔记(二)—— Compose 布局你学会了么?(上)
Jetpack-Compose 学习笔记(二)—— Compose 布局你学会了么?(上)
476 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问