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

数组相关操作的java实现

定义数组的三种方式

😱长度都不可变

int[] arr = {5,10,15};
int[] brr = new int[5];
int[] crr = new int[] {2,10,30};

数组扩容(动态数组)

ArrayList的实现:

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

	//插入
	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 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;
	    }
}

指定位置插入数据

//指定位置插入
	public void insert(int value,int position) {
		//判断位置是否合理
		if(position<0||position>size) {
			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 void insert1(int value) {
		int i;
	    for (i = size-1;i>=0&&arr[i]>value;i--) {  
	        // 将大于 value 的元素向后移动一位  
	        arr[i + 1] = arr[i];  
	    }  
	    // 在找到的位置插入 value  
	    arr[i + 1] = value;  
	    // 更新数组的有效元素数量  
	    size++;  
	}

删除元素

//删除第一个符合条件的数据
	public boolean delFirst(int value) {
		for(int j=0;j<size;j++) {
			if(arr[j] == value) {
				//删除
				for(int i=j+1;i<size;i++) {
					arr[i-1] = arr[i];
				}
				size--;
				return true;
			}
		}
		return false;
		
	}
	//删除所有符合条件的数据
	public boolean delect(int value) {
		for(int j=size-1;j>=0;j--) {
			if(arr[j] == value) {
				//删除
				for(int i=j+1;i<size;i++) {
					arr[i-1] = arr[i];
				}
				size--;
			}
			if(j==0) {
				return true;
			}
		}
		return false;
		
	}


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

相关文章:

  • CM API方式设置YARN队列资源
  • Armv8的安全启动
  • Windows换机华为擎云(银河麒麟V10+麒麟9000C CPU)后,使用selenium的程序怎么办(20241030)
  • SpringCloud Alibaba-05 Seata分布式事务处理
  • Java | Leetcode Java题解之第526题优美的排列
  • Linux: network: hw csum failure
  • TH-OCR 文字识别:开启高效数字化时代
  • 【JavaEE】【网络原理】初识网络
  • 理解SQL中通配符的使用
  • WPF+MVVM案例实战(十三)- 封装一个自定义消息弹窗控件(上)
  • leetcode 3259.超级饮料的最大强化能量
  • Spark学习
  • centos 选什么Distribution?flash安装
  • 机器学习初学者指南:Scikit-Learn基础到实战
  • python的安装环境Miniconda(Conda 命令管理依赖配置)
  • Python学习的自我理解和想法(25)
  • mysql--多表查询
  • 4种鼓励创业创新的方法
  • 【设计模式系列】组合模式(十二)
  • 【系统设计】提升Kafka系统性能:Spring Boot实现Lag感知的生产者与消费者
  • HTML 基础标签——分组标签 <div>、<span> 和基础语义容器
  • 【设计模式】结构型模式(二):代理模式
  • 【Axure视频教程】中继器控制显示不同内容
  • 学习笔记——三小时玩转JQuery
  • 安利一款开源企业级的报表系统SpringReport
  • 关于游戏加加不可以在cs2中显示的解决方案