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

数据结构---自定义动态数组

package cn.dragon.arithmetic.model;import java.util.Arrays;
import java.util.NoSuchElementException;//自定义动态数组
public class MyArrayList<T> {//底层存储的数组private T[] data;//记录的当前元素个数private int size;//默认初始容量private static final int INIT_CAP = 1;public MyArrayList() {this(INIT_CAP);}public MyArrayList(int initCapacity) {data = (T[]) new Object[initCapacity];size = 0;}public void addList(T d) {int cap = data.length;//检查数组容量if (size == cap) {resize(2 * cap);}//在尾部插入data[size] = d;size++;}public void add(int index, T d) {//检查索引越界checkPositionIndex(index);int cap = data.length;//检查data数组容量,需要时进行扩容if (size == cap) {resize(2 * cap);}//挪数据for (int i = size - 1; i >= index ; i--) {data[i + 1] = data[i];}//插入新元素data[index] = d;size++;}public void addFirst(T d) {add(0, d);}//删除最后一个public T removeLast() {if (size == 0) {throw new NoSuchElementException();}int cap = data.length;//缩容if (size == cap / 4) {resize(cap / 2);}T deleteVal = data[size - 1];//删除最后一个元素data[size - 1] = null;size--;return deleteVal;}public T remove(int index) {//检查索引越界checkElementIndex(index);int cap = data.length;//缩容if (size == cap / 4) {resize(cap / 2);}T deleteVal = data[index];//把后面的数据往前挪for (int i = index + 1; i < size; i++) {data[i - 1] = data[i];}data[size - 1] = null;//去除最后一位size--;return deleteVal;}public T removeFirst() {return remove(0);}//获取数据public T get(int index) {checkElementIndex(index);return data[index];}//修改数据public T set(int index, T element) {//检测数组越界checkElementIndex(index);//修改数据T oldVal = data[index];data[index] = element;return oldVal;//返回旧数据}//存储的数组大小public int size() {return size;}//数组是否为空public boolean isEmpty() {return size == 0;}//数组扩容private void resize(int newCap) {T[] temp = (T[]) new Object[newCap];for (int i = 0; i < size; i++) {temp[i] = data[i];}data = temp;}private void checkElementIndex(int index) {if (!isElementIndex(index)) {throw new IndexOutOfBoundsException("index out of bounds, index: " + index);}}private void checkPositionIndex(int index) {if (!isPositionIndex(index)) {throw new IndexOutOfBoundsException("index out of bounds, index: " + index);}}//检查索引位置是否可以存在元素private boolean isElementIndex(int index) {return index >= 0 && index < size;}//检查索引位置是否可以添加元素private boolean isPositionIndex(int index) {return index >= 0 && index <= size;}private void display() {System.out.println("size = " + size + " cap = " + data.length);System.out.println(Arrays.toString(data));}}

http://www.mrgr.cn/news/65636.html

相关文章:

  • 数据库Redis篇
  • 深度学习相关资料
  • css实现边框双色凹凸半圆
  • android——渐变色
  • 大数据计算里的-Runtime Filter
  • Java实战项目-基于微信小程序的校园生活互助服务小程序
  • 从零开发操作系统-为什么磁盘的扇区为 512 byte
  • PMP-人
  • 泛微开发修炼之旅--52关于ecology首页待办修改源码位置记录
  • C#:强大而优雅的编程语言
  • 书签管理工具使用技巧
  • H265编码丢帧问题分析
  • Java-I/O框架10:File类、文件操作
  • 关于LIMS实验室管理系统常见的几个误区
  • 多个锚点定位时的锚点优选方法(附公式和MATLAB代码讲解)
  • CSP 2024 入门级第二轮 CSP-J 2024 复赛 第一题 扑克牌
  • 路径跟踪之导航向量场(三)——无奇异点导航向量场
  • 弹性布局flex-direction
  • 知识图谱论文分享
  • 指针(c语言)
  • gulp入门教程9:lastRun
  • [算法初阶]第二集 滑动窗口(已完结)
  • 宠物空气净化器是不是智商税?真实测试热门品牌!哪款除毛好?
  • 在VScode中配置C_C++环境
  • ROS2 单帧Pcd转多帧节点 录制Bag
  • 截至2024年10月, 数据知识产权登记分析