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

数据结构的插入与删除

初始化

public class ArrayList {
	
	
	
	int size = 0;//记录有效数据的个数
	int capacity =10; //数组容量
	int[] arr = new int[capacity];
	 double factor = 1.5;//因数 1.5

打印数组(相当于toString)

public String toString() {
		 String res = "[";
		 for(int i=0;i<size;i++) {
			 if(i==size-1) {
				 res+=arr[i];
			 }else {
				 res+=arr[i]+", ";
			 }
		 }
		 res+= "]";
		 return res;
	 }

尾插的第一步就是判断数组空间是否还有空闲;

而且String类型是不可变的,所以一旦满数组后,需要进行扩容

 public void add(int element) {
		 if(size == capacity) {
			 //数组满了,扩容
			 capacity = (int)(capacity*factor);//强制类型转换
			 
			 int[] brr = new int[capacity];
			 for(int i=0;i<arr.length;i++) {
				 brr[i] = arr[i];
			 }
			 arr=brr;
		 }
		 //插入数据
		 arr[size]=element;
		 size++;
	 }

指定位置插入

 //指定位置插入
	 public void insert(int value,int position) {
		 //判断位置是否合理
		 if(position>size||position<0) {
			 System.out.println("插入位置不合理");
			 return;
		 }
		 if(size == capacity) {
			 //数组满了,扩容
			 capacity = (int)(capacity*factor);//强制类型转换
			 
			 int[] brr = new int[capacity];
			 for(int i=0;i<arr.length;i++) {
				 brr[i] = arr[i];
			 }
			 arr=brr;
		 }
		 //数组有空间进行插入
		 //插入位置及其之后的数据,从后往前的顺序统一往后移动
		 for(int i=size-1;i>=position;i--) {
			 arr[i+1]=arr[i];
			 
		 }
		 //插入
		 arr[position]=value;
		 size++;
	 }

删除一个符合条件的数据

//删除第一个符合条件的数据
	 
	 public boolean delFirst(int value) {
		 //查找元素
		 for(int j=0;j<size;j++) {
			 if(arr[j]==value) {
				 //删除,j后面的数据都要向前移动一位
				 for(int i=j+1;i<size;i++) {
					 arr[i-1]=arr[i]; 
				 }
				 size--;
				 return true;
			 }
		 }
		 return false;
	 }

删除所有符合条件的数据

//从后往前删,可以删干净
	 public boolean delAll(int value) {
		 boolean hasDeleted = false;
		 for(int k=size-1;k>=0;k--) {
			 if(arr[k]==value) {
				 for(int m=k+1;m<size;m++) {
					 arr[m-1]=arr[m];
				 }
				 size--;
				 hasDeleted = true;
			 }
		 }
		 
		 return hasDeleted;
	 }


http://www.kler.cn/a/503035.html

相关文章:

  • ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技
  • 图解Git——分支的新建与合并《Pro Git》
  • vue3+vite+ts集成第三方js
  • 基于单片机的智能花卉浇水系统的设计与实现
  • 探索网络安全:浅析文件上传漏洞
  • 在 Azure 100 学生订阅中新建一台 Ubuntu VPS,并通过 Docker 部署 Nginx 服务器
  • 基于单片机的无线遥控篮球比赛记分器的设计研究
  • Vue CLI 通过 NODE_ENV 确定当前是开发还是生产环境
  • 【笔记整理】记录参加骁龙AIPC开发者技术沙龙的笔记
  • MYSQL8创建新用户报错:You have an error in your SQL syntax;check...
  • 【Ubuntu与Linux操作系统:十二、LAMP平台与PHP开发环境】
  • 前端基础技术全解析:从HTML前端基础标签语言开始,逐步深入CSS样式修饰、JavaScript脚本控制、Ajax异步通信以及WebSocket持久通信
  • 微服务滚动法布
  • 25/1/13 嵌入式笔记 继续学习Esp32
  • 1.3 k8s-上部署第一个应用程序
  • Pycharm 使用教程
  • 《拉依达的嵌入式\驱动面试宝典》—Linux篇(五)_Linux驱动编程
  • Qt WORD/PDF(五)使用Json一键填充Word表格
  • Windows怎么搭建rust环境?
  • 左值引用(Lvalue Reference)和右值引用(Rvalue Reference)详解
  • 【STM32-学习笔记-5-】ADC
  • Redis十大数据类型详解
  • 第三十八章 Spring之假如让你来写MVC——适配器篇
  • 人工智能知识分享第十天-机器学习_聚类算法
  • 笔记本电脑 选购 回收 特权模式使用 指南
  • qt 快捷功能 快速生成 setter getter 构造函数 父类虚函数重写 成员函数实现 代码框架 查看父类及父类中的虚函数