JAVA中用数组实现列表

列表

List接口继承了java.lang.Object.Collection接口,长度可变且有序,使用起来比数组方便。List接口有ArrayList和LinkedList两个实现类,可自己用数组来实现ArrayList。

实现思想:
定义一个接口,该接口有添加元素、获得元素、删除元素、修改元素、获得大小、遍历输出几个方法。
数组长度固定,但需要列表长度可变,故需在改变列表中元素个数的方法中改变数组的大小。
定义接口时无法确定将要装入列表的元素类型,这里就需要用到泛型。

泛型

java中所有的类都是Object类的子类,虽然通过向上转型和向下转型解决之前元素类型的问题,但是向下转型是不安全的,当类型使用错误时,错误的向下转型能通过编译,但是不能正常运行。
定义泛型类语法如下:

类名<T>

T代表一个类型的名称。
在使用时可改变的内容让其变为需要的类型。

接口:

public interface MyArraylist<E> {
	
	//添加元素
	public void add(E e);
	
	//获得元素
	public E get(int index);
	
	//删除元素
	public void remove(int index);
	
	//修改元素
	public void renew(int index,Object e);
	
	//获得大小
	public int getSize();
	
	//遍历
	public void traverse();
	
}

接口实现类:

public class ImList<E> implements MyArraylist<E>{
	
		int size = 0;
		Object[] ListData = new Object[size];
		
		//添加元素
		public void add(E e) {
		//创建一个比原来长度大1的数组
			Object[] newarray = new Object[size+1];
		//将添加元素保存在数组的最后一个位置
			newarray[size] = e;
		//将原来的数组复制到新数组中
			System.arraycopy(ListData, 0, newarray, 0, ListData.length);
		//将新数组赋给原数组
			ListData = newarray;
		//列表长度加一
			size++;
		}
		
		//获得元素
		public E get(int index) {
			
			return (E)ListData[index];
			
		}
		
		//删除元素
		public void remove(int index) {
			for(int i=index;i<ListData.length-2;i++) {
				ListData[i] = ListData[i+1];
			}
			size--;
		}
		
		//修改元素
		public void renew(int index,Object e) {
			ListData[index] =  e;
		}
		
		//获得大小
		public int getSize(){
			return	this.size;
		}
		
		//遍历
		public void traverse() {
			for(int i=0;i<ListData.length;i++) {
				System.out.println(ListData[i]);
			}
		}
}

这样的实现方式在数据量小的时候还没有什么弊端,当数据量大的时候每次添加一个新数据,都要把数组重新复制一边,效率就会大大降低,还有优化的方法,在之后的学习中补充。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值