动态数组的实现

定义

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

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

3. 知道了数组的数据其实地址BaseAddress,就可以由公式BaseAddress+ i * size 计算出索引i元素的地址。

 * i 即索引,在java,C等语言都是从0开始。

* size 是每个元素占用字节,例如int 占4,double 占8.

性能

空间占用

java中数据结构为:

* 8字节markword

* 4字节class指针(压缩class指针的情况)

* 4 字节数组大小(决定了数组最大容量 2 ^ 32) 

* 数组元素 + 对齐字节(java中所有对象都是8字节1的整数倍 ^12  , 不足的要用对齐字节补足)

动态数组

package com.ma.test;import java.util.Arrays;
import java.util.Iterator;
import java.util.function.Consumer;
import java.util.stream.IntStream;/*** @author Mtz* @version 1.0* @2023/12/2119:51* @function* @comment*/
public class DynamicArray implements Iterable<Integer> {private int size = 0; // 逻辑大小private int capacity = 8; // 容量private int[] array = new int[capacity];public void addLast(int element) {add(size, element);}public void add(int index, int element) {checkAndGrow();if (index >= 0 && index < size) {// 向后挪动,空出待插入位置System.arraycopy(array, index, array, index + 1, size - index);}array[index] = element;size++;}private void checkAndGrow() {if (size == 0) {array = new int[capacity];// 容量检查} else if (size == capacity) {// 进行扩容capacity += capacity >> 1;int[] newArray = new int[capacity];System.arraycopy(array, 0, newArray, 0, size);array = newArray;}}public int get(int index) {return array[index];}public void foreach(Consumer<Integer> consumer) {{for (int i = 0; i < size; i++) {consumer.accept(array[i]);}}}@Overridepublic Iterator<Integer> iterator() {return new Iterator<Integer>() {int i = 0;@Overridepublic boolean hasNext() {return i < size; // 有没有下一个元素}@Overridepublic Integer next() {  // 并移动到下一个元素return array[i++];}};}public IntStream stream() {return IntStream.of(Arrays.copyOfRange(array, 0, size));}public int remove(int index) {int removed = array[index];if (index < size - 1) {System.arraycopy(array, index + 1, array,index, size - index - 1);}size--;return removed;}
}

测试

package com.ma.test;/*** @author Mtz* @version 1.0* @2023/12/229:05* @function* @comment*/
public class Test {public static void main(String[] args) {DynamicArray dynamicArray = new DynamicArray();dynamicArray.addLast(1);dynamicArray.addLast(2);dynamicArray.addLast(3);dynamicArray.addLast(4);dynamicArray.foreach((element)->{System.out.println(element);});for (Integer element : dynamicArray){System.out.println(element);}dynamicArray.stream().forEach(element->{System.out.println(element);});}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络-网络层

计算机网络-网络层 以下笔记整理为哔哩哔哩湖科大教书匠的《计算机网络微课堂》的教学视频。 链接&#xff1a;计算机网络微课堂 1. 网络层概述 1.1 网络层的主要任务是实现网络互联&#xff0c;进而实现数据包在各网络之间的传输。 1.2 要实现网络层任务&#xff0c;需要解决…

【飞凌 OK113i-C 全志T113-i开发板】一些有用的常用的命令测试

一些有用的常用的命令测试 一、系统信息查询 可以查询板子的内核信息、CPU处理器信息、环境变量等 二、CPU频率 从上面的系统信息查询到&#xff0c;这是一颗具有两个ARMv7结构A7内核的处理器&#xff0c;主频最高1.2GHz 可以通过命令查看当前支持的频率以及目前所使用主频 …

Spring IoCDI

文章目录 前言什么是Spring1. 什么是 IoC 容器1.1 什么是容器1.2 什么是 IoC 2. 什么是DI IoC & DI 的使用IoC详解Bean的存储Controller注解如何获取Bean1. 根据Bean的名称获取Bean2. 根据Bean类型获取Bean3. 根据Bean名和Bean类型获取Bean Service注解Repository注解Compo…

Android Framework一些问题思考

一&#xff0c;zygote通信为什么用socket&#xff0c;而不是binder? 1&#xff0c;binder通信依赖Servicemanager&#xff0c;socket通信不依赖用户空间进程。zygote与servicemanager, surfaceflinger等都是通过各自init.rc被init创建&#xff0c;时序上无法保证zygote启动时…

使用Docker一键部署Uptime Kuma,并将监控服务映射至公网访问

文章目录 **主要功能**一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务&#xff0c;如何安装Docker详见&#xff1a; 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址访问…

go语言初体验1--使用go install

当安装后go语言后。 尝试编写go程序。 当使用 go install 命令&#xff0c;报错。 go: go install requires a version when current directory is not in a moduleTry go install jvmgo\ch01latest to install the latest version通过查找资料。 用命令&#xff1a; go env …

【Qt之Quick模块】4. QML语法格式及命名规范

概述 QML&#xff08;Qt Meta-Object Language&#xff09;是一种声明式语言&#xff0c;用于设计用户界面。它是由Qt框架提供的一种描述界面组件的语言&#xff0c;可以与C代码结合使用&#xff0c;用于创建跨平台的应用程序。 QML具有以下特点&#xff1a; 声明式&#xff…

混合精度训练(MAP)

一、介绍 使用精度低于32位浮点数的数字格式有很多好处。首先&#xff0c;它们需要更少的内存&#xff0c;可以训练和部署更大的神经网络。其次&#xff0c;它们需要更少的内存带宽&#xff0c;这加快了数据传输操作。第三&#xff0c;数学运算在降低精度的情况下运行得更快&a…

YOLOv5算法改进(23)— 更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去…

C++类与对象(中)第一篇

目录 前言&#xff1a; 类的六个默认成员函数 构造函数 析构函数 拷贝构造函数 拷贝场景一&#xff1a;函数参数类型为类类型对象 拷贝场景二&#xff1a;利用已存在的对象创建新对象 拷贝场景三&#xff1a;函数返回值类型为类类型对象 前言&#xff1a; 编译器编译类…

推箱子地图库1-49关

推箱子地图库1-49关 49关 local WALL1--{"墙","墙 "}4 10287 local DEST2--{"目的地",""}1 4001100 10157 local BOX3--{"箱子","&#xffe5;"} 2 2000801 local PLAYER4--{"玩家","&&a…

python依赖包管理

在Python项目中&#xff0c;通常会有一个名为 requirements.txt 的文件&#xff0c;其中列出了项目所需的所有依赖包及其版本。 1. 使用freeze 如果你的项目中没有 requirements.txt 文件&#xff0c;你可以通过下面的命令创建一个当前项目所在环境下已安装的包及其版本的 re…

vue中的生命周期和VueComponent实例对象

生命周期 关于VueComponent 生命周期又叫生命周期钩子&#xff0c;生命周期函数 生命周期是&#xff0c;Vue在关键的时刻帮我们调用的一些特殊名字的函数 生命周期的this指向vm或者组件实例对象 mounted会将初始化的Dom挂载到页面上 <template><div class"he…

vue前端开发中,通过配置,实现多个入口文件的方法

由于vue为单页面项目&#xff0c;通过控制组件局部渲染&#xff0c;main.js是整个项目唯一的入口&#xff0c;整个项目都在一个index.html外壳中。 若项目过大&#xff0c;会造成单页面负载过重&#xff1b;同时&#xff0c;多页面利于模块独立部署。 要单独将页面当成一个项…

react 18 Hooks扩展函数式组件的状态管理

React函数式组件 特点 React函数式组件具有以下特点&#xff1a; 简洁&#xff1a;使用函数的方式定义组件&#xff0c;语法简单直观。无状态&#xff1a;函数式组件没有内部状态&#xff08;state&#xff09;&#xff0c;只依赖于传入的props。可复用&#xff1a;函数式组…

influxdb-cluster集群部署

一.部署环境 * InfluxDB集群节点数&#xff1a;mate服务至少3个节点&#xff0c;节点数越多&#xff0c;集群性能越高。 * 操作系统&#xff1a;支持的操作系统包括Linux、Windows和MacOS。 * CPU&#xff1a;至少2核4线程&#xff0c;主频越高越好。 * 内存&#xff1a;至少8…

基于SSM的大学生兼职平台的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的大学生兼职平台的设计与实现,j…

新疆某职业技术学院,实现对上千台IT设备的集中监控和管理

随着信息化时代的快速发展&#xff0c;IT技术已经成为教育领域不可或缺的一部分。新疆某职业技术学院为了更好地支持教学和科研工作&#xff0c;决定引入监控易管理平台7.0&#xff0c;实现对上千台IT设备的监控管理。通过引入该平台&#xff0c;职业技术学院的IT运维效率和质量…

【已解决】Redis序列化反序列化不一致 - String类型值多了双引号问题

在项目中使用spring 的RedisTemplate从redis中获取数据的时候&#xff0c;发现字符串的value多了双引号。如下图所示&#xff1a; 产生的原因可以分一下几个方面&#xff1a; 一、采用的序列化对象不同 多服务之间调用时候&#xff0c;序列化服务A(向redis中写数据的)和反序…

【翼韵】数据上传沟通、决策、试错

韵达德邦来说说&#xff0c;翼达、翼韵、翼德、翼邦的小记录 翼达同学&#xff1a;沟通成本好大&#xff01; 翼韵同学&#xff1a;决策成本很大&#xff01; 翼德同学&#xff1a;试错成本更大&#xff01; 翼邦同学&#xff1a;你们加起最大&#xff01; QY成本沟通成本33%决…