public class MyArrayList implements IList{
private Object [] a;
private int sum;
//构造器
public MyArrayList(){
a=new Object [100];
sum=0;
}
//数组线性表的迭代器内部类
private class MyIterator<T> implements IMyIterator<T>{
private int listAddress=0;
@Override
public boolean hashNext() {
if(listAddress>=a.length)
return false;
if(a[listAddress]==null){
listAddress++;
return hashNext();
}
return true;
}
@Override
public T next() {
if(!hashNext())
throw new RuntimeException("没有课返回元素!");
T element =(T) a[listAddress];
listAddress++;
return element;
}
}
@Override
public int getSize() {
return sum;
}
@Override
public boolean isEmpty() {
return getSize()==0;
}
@Override
public void clear() {
sum=0;
}
@Override
public T get(int position) {
if(position<0||position>=sum)
throw new RuntimeException("取出元素时给定下标越界:"+position);
return (T) a[position];
}
@Override
public T set(int position, T element) {
if(position<0||position>=sum)
throw new RuntimeException("替换元素时给定下标越界:"+position);
T result =(T) a[position];
a[position]=element;
return result;
}
@Override
public void add(T element) {
//容量不够,进行扩容
enlargeCapacity();
a[sum]=element;
sum++;
}
//扩容
private void enlargeCapacity(){
if(sum<a.length)
return;
Object [] b =new Object[2*a.length];
for(int i =0 ;i<sum ;i++)
b[i]=a[i];
a=b;
}
@Override
public T remove(int position) {
if(position<0||position>=sum)
throw new RuntimeException("删除元素时给定下标越界:"+position);
T result=(T)a[position];
for(int i=position+1 ;i<sum ;i++)
a[i-1]=a[i];
sum--;
return result;
}
@Override
public int findIndexof(T element) {
//将线性表中每个元素和该元素进行比较,相等则找到
for(int i=0 ;i<sum ;i++)
{
//判断对象是否等价
if((element!=null&&element.equals(a[i]))||(element==a[i]))
return i;
}
return -1;
}
@Override
public boolean isContained(T element) {
return findIndexof(element)>=0;
}
@Override
public String toString(){
String result="MyArray: ( ";
for(int i=0 ;i<sum ;i++)
result+=a[i]+", ";
result+=")";
return result;
}
@Override
public void reverse() {
for(int i=0,j=sum-1;i<=j;i++,j--){
Object b=a[i];
a[i]=a[j];
a[j]=b;
}
}
//返回一个迭代器
public IMyIterator getIterator(){
return new MyIterator();
}
}