Java自定义类数组的创建和使用

目录

一、数组核心概念

1.数组是什么?

2.数组优点

3.数组缺点

4.数组用处

二、封装一个自定义数组类MyList

1.数组属性定义

2.数组初始化方法

3.数组扩容方法

4.增加元素方法

5.删除元素方法

6.替换元素方法

7.元素排序方法

 8.数组合并方法

9.获取元素方法


一、数组核心概念

1.数组是什么?

数组是内存中用来存储数据的一段连续固定长度空间,有长度、存储数据容量、下标等属性。

2.数组优点

a、数组能存储大量数据,我们可以按照索引遍历数组中的元素。

b、数组是一个简单的线性序列,我们可以按照索引对数组中的元素进行增、删、查、取等操作。

c、由于我们可以通过下标对数组元素进行一次性操作,所以数组的时间复杂度为O1。

3.数组缺点

a、数组的长度固定,其大小一经确定就不能改变。

b、数组相对于链表,其插入元素、增删元素、查找元素慢。

c、数组不好管理。

4.数组用处

在进行模型设计、已知数据量规模或用来临时存储少量数据时可以使用数组,简化算法。

二、封装一个自定义数组类MyList

1.数组属性定义

数组存储数据的结构(数组类型为Object(所有类的父类))、长度、已存储数据量、下标。

Object[] valueArray={};//数组初始化时最好加上{}防止报空指针错误
int length;
int size;
int index;
int defaultlength=10;//默认长度

2.数组初始化方法

public void initArray() {
		length=defaultlength;
		valueArray=new Object[length];
		size=0;
		index=0;		
}
public MyList(){
		initArray();
}

3.数组扩容方法

在数组已满的情况下,往数组中增加元素会出现越界错误。此时需要对数组进行扩容,创建一个更大容量的数组,将原数组中的数据遍历复制过去。再通过对象名赋值,将使用的数组替换为这个新创建的数组 。

public void grow() {
		System.out.println("扩容前:"+length);
		int newlength=length*2;
		length=newlength;//容量更改
		Object[] newArray=new Object[length];//定义新数组
		//循环遍历 将原数组元素值赋值到扩容数组中 实现copy操作
		for(int i=0;i<valueArray.length;i++) {
			newArray[i]=valueArray[i];
		}
		//替换引用
		valueArray=newArray;
		System.out.println("扩容后:"+length);
	}

4.增加元素方法

增加数据时考虑容量有限,对数组进行扩容操作。

public void add(Object value) {
		if(size>=length) {//判断是否跨界 跨界则对数组进行扩容 
			grow();	
		}
		valueArray[index]=value;
		size++;
		index++;
	}

5.删除元素方法

 删除元素时同样需要考虑是否越界,然后根据索引值删除元素,删除元素后后面元素的索引值往前移。

	//数组减元素方法 根据索引值删除元素 后面元素的索引值往前移 同样考虑是否越界
	public void delete(int index) {
		if(index<0||index>=size){
			System.out.println("输入索引错误:越界");
		}else if(index==size-1){//删除最后一个元素 后面无元素补上其位置 所以将其设置为空值null
			valueArray[index]=null;
		}else {//删除中间元素 后面元素补上已删元素的位置
			valueArray[index]=valueArray[index+1];	
		}
		size--;
	}

6.替换元素方法

public void swap(int index,Object value) {
		if(index<0||index>this.length){
			System.out.println("输入索引错误:越界");
		}else {
			valueArray[index]=value;
		}		
	}

7.元素排序方法

采用冒泡排序法,比较数组中相邻元素,如果前面元素小于后面元素,那么将两个元素位置互换,使元素按从大到小进行排列。

//排序 从大到小进行排序(Object类型如何转换成int类型进行比较?)
	public void sort(){
		//对数组进行遍历 定义数组比较的两个元素 
		for(int i=0;i<valueArray.length-1;i++) {//第一个元素从数组第一个元素取至数组倒数第二个元素
			for(int j=i+1;j<valueArray.length;j++) {//第二个元素从第一个元素后一个元素取至数组最后一个元素
				if(((Integer)valueArray[i])<((Integer)valueArray[j])){//强制转换成int类型进行比较
					int temp=(Integer)valueArray[i];//现将大的放至空容器中
					valueArray[i]=(Integer)valueArray[j];//原大的赋值给原小的
					valueArray[j]=temp;//完成交换	
				}
			}
		}
	}

 8.数组合并方法

//合并其他数组或者队列对象
	public void merge() {
		int[] valueArray0= {20,30,40,50,60,70,80};
		if(size>=length) {
			grow();
		}
		for(int inx=0;inx<valueArray0.length;inx++) {
			add(valueArray0[inx]);//调用前已构造的add方法
		}
	}

9.获取元素方法

通过下标获取元素

public Object get(int index) {
		if(index>=0&&index<this.index) {
			return valueArray[index];
		}else {
			System.out.println("输入下标错误:越界");
		}
		return null;//报错
		}

  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值