基础数据结构——数组(动态数组,二维数组,缓存与局部性原理)

1.概述

在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识

因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如:

int[] array = {1,2,3,4,5}

知道了数组的数据起始地址 BaseAddressBaseAddressBaseAddress,就可以由公式 BaseAddress+i∗sizeBaseAddress + i * sizeBaseAddress+isize 计算出索引 iii 元素的地址

  • iii 即索引,在 Java、C 等语言都是从 0 开始
  • sizesizesize 是每个元素占用字节,例如 intintint444doubledoubledouble888
空间占用

Java 中数组结构为

  • 8 字节 markword(记录了这个对象的 HashCode,分代年龄,锁信息等等)
  • 4 字节 class 指针(压缩 class 指针的情况)
  • 4 字节 数组大小(决定了数组最大容量是 2322^{32}232
  • 数组元素 + 对齐字节(java 中所有对象大小都是 8 字节的整数倍[^12],不足的要用对齐字节补足)
  • 在这里插入图片描述
随机访问性能

即根据索引查找元素,时间复杂度是 O(1)O(1)O(1)

2.动态数组

package com.lemon.demo.array;

import java.util.Arrays;
import java.util.Iterator;
import java.util.function.Consumer;
import java.util.stream.IntStream;

/**
 * @author 李猛
 * @datetime 2024/10/17 17:41
 * @description 动态数组
 */
public class DynamicArray implements Iterable<Integer> {
   
   
    private int capacity = 8;//容量,初始容量8
    private int size = 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值