Java中泛型数组的使用

  1. 构想初衷:众所周知,Java在当前现阶段的各个版本当中,提供的Array数组均有不可变性。无论是直接创建数组还是间接创建数组,数组的长度均不可变。这就导致在使用数组时,无法实现数组的改变等功能。而为实现此类功能,相应的Java提供了ArrayList动态数组以及LinkList链表等功能。然而,ArrayList受制于内容类型必须统一的原因,部分功能又难以实现。因此,泛型数组应运而生。

  2. 泛型的概念:泛型,即“参数化类型”。一般情况下我们在提及参数的时候,参数的类型均是确定的,例如String A, 或者int B。 然而,正因为在泛型数组中我们目的是多种数据类型均可以实现的功能,我们将这些数据类型参数化,由具体数据/具体操作来实现。

  3. 代码思路:由于要实现增添删改的功能,创建接口提供增添删改四种抽象功能,并将这四种功能在类之中继承并重写

代码:

import java.util.Arrays;
public class MyArrayList<E> implements MyArrayListFunction<E> {
//设定长度,以及声明myList为数组
	private int Length;
	private Object[] myList = new Object[Length];
	// 添加元素
	public void add(E e) {
	  // 创建新的数组
		Object[] myListNew = new Object[Length + 1];
	  // 把想要加入的元素保存在新的数组的最后一位,另外注意此时新的数组长度已经改变
		myListNew[Length] = e;
	  // 将原来的数组复制给新的数组
	  	for (int i = 0; i < myList.length; i++) {
			myListNew[i] = myList[i];
		// 将新数组赋值给原数组
	  	myList = myListNew;
	  	// 数组长度发生改变
	 	Length = Length + 1;
		 }
	  }
	 // 删除元素(类似于添加元素)
	public void remove(int inputIndex) {
	   
	 //先判断输入的索引是正还是负,即判断是正向索引还是负向索	
		if(inputIndex>0) {
			if (inputIndex<myList.length-1) {int index = inputIndex;
		  	// 创建一个新的数组以承装保留下来的元素
	 		Object[] myListNew = new Object[Length - 1];
	   		// 将要删除的元素位置以前的元素复制
	   		for (int i = 0; i < index; i++) {
	   		myListNew[i] = myList[i];
	   		// 将要删除的元素位置以后的元素复制
	   		for (int i = index; i < myList.length; i++) {
	    		myListNew[i - 1] = myList[i];
	   		}
	   		// 将新数组赋值给原数组
	   		myList = myListNew;
	   		// 数组长度减一
	   		Length = Length - 1;
	
	   		}
	  		else {
	    			System.out.println("输入的索引有误");
	   		}
	   }
		else {
	   		if (Math.abs(inputIndex) <= myList.length) {
	    			int index = myList.length - Math.abs(inputIndex);
	    			// 创建一个新的数组以承装保留下来的元素
	    			Object[] myListNew = new Object[Length - 1];
	    			// 将要删除的元素位置以前的元素复制
	    			for (int i = 0; i < index; i++) {
	     			myListNew[i] = myList[i];
	    			}
	    			// 将要删除的元素位置以后的元素复制
	    			for (int i = index; i < myList.length; i++) {
	     			myListNew[i - 1] = myList[i];
	   			}
	   			// 将新数组赋值给原数组
	    			myList = myListNew;
	    			// 数组长度减一
	    			Length = Length - 1;
	   			}
	   		else {
	    			System.out.println("输入的索引有误");
	   }
	   
	  }
	  
	 }
	 // 修改元素
 	public void renew(int index, Object e) {
  	myList[index] = e;
	}
	// 查找元素
 	public E get(int index) {
  	return (E) myList[index];
 	}
 	public static void main (String[] args) {
  	MyArrayList<Integer> list = new MyArrayList<Integer>();
  	list.Length = 4;
  	//设置myList这个属性
     	list.myList =new Integer[]  {1,2,3,5};
     	//检验是否设置成功
     	Object x = list.myList[0];
     	     
     	String intArrayString = Arrays.toString(list.myList);
     	//如果成功输出了X和列表本身的内容,则myList属性设置成功
     	System.out.println(x);
     	System.out.println(intArrayString);
     	//测试add这个方法
     	list.add(4);
     	Object y = list.myList[0];
     	System.out.println(y);


	}	
}
	

	




	```
	

```java
//接口代码
public interface MyArrayListFunction<E> {	
	public interface MyArraylist<E> {
		// 添加元素
  		public abstract void add(E e);
  		// 获得元素
  		public abstract E get(int index);
  		// 删除元素
  		public abstract void remove(int index);
  		// 修改元素
  		public abstract void renew(int index, E e);
	}
}	
	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值