编写Java程序,定义一个类似于ArrayList集合类

返回本章节

返回作业目录


需求说明:

  • 设计一个类似于ArrayList的集合类ListArray。
  • ListArray类模拟实现动态数组,在该类定义一个方法用于实现元素的添加功能,以及用于获取ListArray动态数组中所有元素的总个数。
  • 在ListArray类中定义一个用于迭代动态数组所有元素的方法。

实现思路:

定义迭代接口Foreach,在该接口中定义两个方法,分别是判断迭代器中是否还有下一个元素的方法,以及获取迭代器中下一个元素的next()方法。

public interface  Foreach {
	//判断迭代器中是否还有元素
	public	boolean	hasNext();
	//获取迭代器中的下一个元素
   	public  Object  next();
}

创建自定义模拟实现动态数组的集合类ListArry,在该类中定义int类型属性capacity,表示该类中封装的动态数组的容量。

在ListArray类中定义Object[]类型属性data,该属性用于保存添加到ListArray类中的元素。

在ListArray类中定义int类型属性index,该属性作为计数器,既可以表示当前数组已经添加到第几个元素,又可以表示当前ListArray存储元素的总个数。

ListArray类中定义一个带有int类型形参的构造方法,在构造方法中实现对data数组的初始化。

在ListArray类中定义addElement(Object ele)方法,该方法用于实现数据的添加功能。

在添加元素每次调用adeElement()方法时,index计数器需要自增1,当index的值大于等于data数组的容量时,需要重新创建一个原数组长度2加1大小的新数组的实例,并将该实例赋值于data变量。在此过程中,还需要将老数组的数组保存于新数组对应下标位置的元素中。

public  void addElement(Object ele){
    if(data.length>=this.capacity){
		  this.capacity=this.capacity*2+1;
		  Object[] oldData=data;
		  data=new Object[this.capacity];
		  for(int i=0;i<oldData.length;i++){
			 data[i]=oldData[i];
		  }
	  }
	  data[index++]=ele;
}

在ListArray类中定义size()方法,该方法返回当前ListArray集合中保存元素的总个数。

在ListArray类中,定义返回Foreach接口实例的foreacher()方法。

public  Foreach  forecher(){
	 return  new ListArrayForeach();
}

在ListArray类中创建私有内部类ListArrayForeach,该类实现Foreach接口,通过该类实现对ListArry集合类的迭代输出的功能。

private class ListArrayForeach implements Foreach{
	 private int counter;//计数器
	 public boolean hasNext() {
        	           return  counter<index?true:false;
	 }
	 public Object next() {
	           if(counter<index)
	                   return  data[counter++];
	           else
	                    throw   new  RuntimeException("No Such Element Exception");
	 }
}

实现代码:

 

posted @ 2020-06-11 23:52  明金同学  阅读(79)  评论(0编辑  收藏  举报