Java重写ArrayList方法

news2024/11/18 19:37:51

前言:ArrayList中有很多方法,我们只有深知这些方法是怎么实现的才能更好的使用,不用死记硬背

我们来一一实现(重写)

前提准备:我们需要先创建一个类,类中写ArrayList的内部结构组成

public class MyList implements IList {
 private int[] array;
 private int size;
 public static final int Defaulte_size = 2;

 public MyList() {
  this.array = new int[Defaulte_size];
 }
}

add(int data)

 public void add(int data) {
  if (isFull()) array = Arrays.copyOf(array, 2 * array.length);//数组容量不够扩容
  array[size] = data;
  size++;
 }

add(int pos, int data)

 public void add(int pos, int data) {//指定位置添加元素
   if(pos<0 || pos >size) {
   System.out.println("pos不合法");
   return ;
  }
  if (isFull())array = Arrays.copyOf(array, 2 * array.length);
  for (int i = size-1; i >pos ; i--) {
   array[i+1]=array[i];
  }
  array[pos]=data;
  size++;

contains(int toFind)

 //查找当前元素 是否存在
 public boolean contains(int toFind) {
  if (array == null) return false;
  for (int i = 0; i < array.length; i++) {
   if (array[i] == toFind) return true;
  }
  return false;
 }

indexOf(int toFind)

 //查找当前元素 的下标
 public int indexOf(int toFind) {
  if (array == null) return -1;
  else {
   for (int i = 0; i < array.length; i++)
    if (array[i] == toFind) return i;
  }
  return -1;
 }

get(int pos) 

 //返回下标元素
 public int get(int pos) {
  if (isEmpty() || pos < 0 || pos >=size) {System.out.println("pos不合法");return -1;}
  else return array[pos];
 }

set(int pos, int value)

 //更新pos位置的值为value
 public void set(int pos, int value) {
  if (isEmpty()|| pos < 0 || pos >= size) {
   System.out.println("pos不合法");return;}
  array[pos] = value;
 }

 remove(int toRemove)

//删除toRemove这个数字
 public void remove(int toRemove) {
  int dex=indexOf(toRemove);
  if (isEmpty() || dex < 0 || dex >= size) { System.out.println("没有"+toRemove);return;}
  else {
   for (int i = dex + 1; i < size; i++) {
    array[i - 1] = array[i];
   }//如果删除最后一个元素,最后size--后可以被删除
   size--;
  }
 }

size()

 public int size() {
//求表中元素个数
  return size;
 }

clear()

//清空顺序表

 public void clear() {
  size=0;
 }

display() 

//打印顺序表元素
 public void display() {
  for (int i = 0; i <size ; i++) {
   System.out.print(array[i]+" ");
  }
  System.out.println();
 }

isFull()

//判断是否满了 满了要扩容
 public boolean isFull() {
  if (size==array.length)return  true;
  return false;
 }

 isEmpty()

//判断表是否为空
public boolean isEmpty() {
  return size==0;
 }
}

测试代码

public class Testmain {
    public static void main(String[] args) {
        MyList test =new MyList();
        test.add(1);
        test.add(2);
        test.add(3);
        test.remove(4);
        test.add(3,5);
       test.display();
        System.out.println(test.isFull());
        System.out.println(test.get(0));
    }
}

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

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

相关文章

Javascript 地狱级的if else / switch case该如何优化?

目录 问题 一、7大策略优化 1.单个if语句优化 2.if/else语句优化 3.多条件判断 4.多个 if else 嵌套优化策略 问题场景 如何优化 1.使用卫语句 2. try catch优化 3. 可选链 optional chaining 5.Map优化 场景实战 6.策略模式优化 7.复杂二维数组策略模式 …

Fpga开发笔记(一):高云FPGA芯片介绍,入手开发板套件、核心板和底板介绍

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/135551179 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

趣味编程:少儿编程思维的启蒙之旅

随着科技的发展&#xff0c;编程已经成为了一项重要的技能。越来越多的家长开始关注少儿编程教育&#xff0c;希望孩子能在轻松愉快的氛围中学习编程知识&#xff0c;培养编程思维。而图形化编程工具Scratch正是这样一款专为少儿打造的编程软件&#xff0c;让孩子们在趣味编程的…

leetcode第365题:水壶问题

有两个水壶&#xff0c;容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 targetCapacity 升。 如果可以得到 targetCapacity 升水&#xff0c;最后请用以上水壶中的一或两个来盛放取得的 targetCapacity 升水。 你可以&a…

关于霍尔电流传感器在电池柜监测中的设计与应用-安科瑞 蒋静

摘要&#xff1a;本文分析了霍尔电流传感器的工作原理&#xff0c;浅谈其在电池柜监测中的应用。 关键词&#xff1a;霍尔电流传感器 工作原理 充放电电流 电池柜 引言 大多数的工厂里&#xff0c;使用到的电池柜&#xff0c;它是将许多的新组装的电池一起进行充电的&…

OpenCV-Python(40):光流算法

目标 光流的概念以及Lucas-Kanade 光流法使用函数cv2.calcOpticalFlowPyrLK() 对图像中的特征点进行跟踪 光流 介绍 由于目标对象或者摄像机的移动造成的图像对象在连续两帧图像中的移动被称为光流。它是一个2D 向量场&#xff0c;可以用来显示一个点从第一帧图像到第二帧图像…

使用 raise_exception 装饰器,简化 if not ... raise ... 抛出异常的过程

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 python 装饰…

多角度展文明风采!成都市第二届公益短视频大赛落幕

近日&#xff0c;“金芙蓉文明让生活更美好”成都市第二届公益短视频大赛揭晓获奖名单&#xff0c;170余部作品脱颖而出。此次大赛共收到700余部参赛作品&#xff0c;以不同手法、从不同角度描绘文明成都。 用短视频弘扬社会主义核心价值观 以真实故事为原型引发更多人共鸣 …

Android-常用数据结构和控件

HashMap 的原理 HashMap 的内部可以看做数组链表的复合结构。数组被分为一个个的桶(bucket)。哈希值决定了键值对在数组中的寻址。具有相同哈希值的键值对会组成链表。需要注意的是当链表长度超过阈值(默认是8)的时候会触发树化&#xff0c;链表会变成树形结构。 把握HashMap的…

线性代数基础【4】线性方程组

第四章 线性方程组 一、线性方程组的基本概念与表达形式 二、线性方程组解的基本定理 定理1 设A为mXn矩阵,则 (1)齐次线性方程组AX0 只有零解的充分必要条件是r(A)n; (2)齐次线性方程组AX0 有非零解(或有无数个解)的充分必要条件是r(A)&#xff1c;n 推论1 设A为n阶矩阵,则…

干货速递|用需求在环仿真扩展基于模型的系统工程实践:起落架系统案例

摘要 仿真已经成为大多数行业大规模采用基于模型的系统工程&#xff08;MBSE&#xff09;和基于模型的设计&#xff08;MBD&#xff09;工具的至关重要的因素。与此同时&#xff0c;实用的需求工程工具在以文档需求规格为主的生命周期管理之外并未得到显著发展&#xff0c;这使…

【CSS】首个字符占用多行,并自定义样式

效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>首字母大写</title><style&…

消息的发送与接收

消息的发送与接收 消息的发送与接收不仅仅是在于聊天功能的实现。其实还有很多种情况也算"消息的发送与接收"。而且我们还可以通过多种方法去实现。我们可以基于实际情况来选择。 WebSocket实现 node做后端。找了好多&#xff0c;前端页面总是用到了jQuery&#x…

AMC8历年详细考点分类,都熟悉了考高分不成问题(2024年也适用)

还有四天&#xff0c;2024年AMC8美国数学思维活动&#xff08;竞赛&#xff09;就要正式开始了&#xff0c;这两天有多位家长咨询六分成长&#xff0c;想了解AMC8的主要考点&#xff0c;或者说经常考的内容。 根据2000-2023年这23年的真题分析&#xff0c;AMC8试题的考点可以分…

Java开发+Intellij-idea+Maven+工程构建

Java开发Intellij-ideaMaven工程构建 Intellij-idea是一款流行的Java集成开发环境&#xff0c;它支持Maven作为项目管理和构建工具。Maven可以帮助开发者自动下载项目依赖的jar包&#xff0c;执行编译、测试、打包等生命周期任务。本资源将介绍如何在Intellij-idea中创建、导入…

MATLAB二维与三维绘图实验

本文MATLAB源码&#xff0c;下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740747 一、实验目的 掌握图形对象属性的基本操作。掌握利用图形对象进行绘图操作的方法。 二、实验内容 利用图形对象绘制曲线&#xff…

亚信安慧AntDB超融合框架——数智化时代数据库管理的新里程碑

在信息科技飞速发展的时代&#xff0c;亚信科技AntDB团队提出了一项颠覆性的“超融合”理念&#xff0c;旨在满足企业日益增长的复杂混合负载和多样化数据类型的业务需求。这一创新性框架的核心思想在于融合多引擎和多能力&#xff0c;充分发挥分布式数据库引擎的架构优势&…

钉钉逐浪AI Agent

文&#xff5c;郝 鑫 编&#xff5c;刘雨琦 “大公司代表落后生产力&#xff0c;是慢半拍的”&#xff0c;“小创新靠大厂&#xff0c;大创新仍然要靠小厂”&#xff0c;这是以李彦宏和王小川为代表的创业老炮&#xff0c;在2023年总结出来的创新规律&#xff0c;从移动互…

图形化编程:以Scratch引领少儿编程思维启蒙之旅

在21世纪科技飞速发展的今天&#xff0c;编程教育已经成为培养未来人才的重要途径。而“少儿编程”这一概念的提出&#xff0c;正是为了让孩子们从小接触并理解计算机逻辑&#xff0c;锻炼他们的创新思维与问题解决能力。其中&#xff0c;图形化编程以其直观易懂、趣味性强的特…

手把手教你VS code文件如何在顶部自动生成作者,修改日期等信息

1、安装插件KoroFileHeader 2、左下角选择管理---设置---输入"fileheader"---点击"在setting.json中编辑" 输入"fileheader"-点击"在setting.json中编辑" fileheader 必须的基础配置: 头部注释模板与函数注释模板 复制&#xff1a;…