迭代器接口:
public interface Iterable
{
Iterator iterator();
}
public interface Iterator
{
boolean hasNext();
Integer next();
void remove();
}
接口代码:
//int 类型的 List 实现
//int 用作下标。Integer 用于元素
public interface List extends Iterable
{
boolean add(Integer e);
void add(int index,Integer e);
//根据下标删除
Integer remove(int index);
//删除第一个遇到的
boolean remove(Integer element);
Integer get(int index);
Integer set(int dex,Integer e);
int size();
void clear();
boolean isEmpty();
boolean contains(Integer e);
int indexOf(Integer e);
int lastIndexOf(Integer e);
}
方法代码:
import java.util.Arrays;
public class ArrayListDemo1 implements List
{
private int[] array;//顺序表内部数组
private int size; //顺序表元素个数
@Override
public String toString()
{
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < size; i++)
{
sb.append(array[i]);
if (i != size - 1)
{
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
//90
public ArrayListDemo1()
{
//初始容量为10个
array = new int[10];
//初始元素个数为0
size = 0;
}
//10
public ArrayListDemo1(List other)
{
array = new int[other.size()];
for (int i = 0; i < other.size(); i++)
{
array[i] = other.get(i);
}
size = other.size();
}
@Override
public boolean add(Integer e)
{
if (array.length == size)
{
ensureCapacity(array.length * 2);
}
array[size++] = e;
return true;
}
public void ensureCapacity(int capacity)
{
if (this.array.length >= capacity)
{
return;
}
int[] newArray = new int[capacity];
for (int i = 0; i < size; i++)
{
newArray[i] = this.array[i];
}
this.array = newArray;
}
@Override
public void add(int index, Integer e)
{
if (index < 0 || index > size)
{
throw new IndexOutOfBoundsException("下标不合法:" + index);
}
if (array.length == size)
{
ensureCapacity(array.length * 2);
}
int i = size;
while (i > index)
{
array[i] = array[i - 1];
i--;
}
size++;
array[index] = e;
}
@Override
public Integer remove(int index)
{
if (index < 0 || index > size - 1)
{
throw new IndexOutOfBoundsException("下标不合法:" + index);
}
int e = array[index];
int i = index + 1;
while (i < size)
{
array[i - 1] = array[i];
i++;
}
size--;
return e;
}
@Override
public boolean remove(Integer e)
{
for (int i = 0; i < size; i++)
{
if (array[i] == e)
{
remove(i);
return true;
}
}
return false;
// int index = indexOf(e);
// if(index != -1)
// {
// remove(index);
// return true;
// }
// else
// {
// return false;
// }
}
@Override
public Integer get(int index)
{
if (index < 0 || index > size - 1)
{
throw new IndexOutOfBoundsException("下标不合法:" + index);
}
return array[index];
}
@Override
public Integer set(int index, Integer e)
{
if (index < 0 || index > size - 1)
{
throw new IndexOutOfBoundsException("下标不合法:" + index);
}
Integer old = array[index];
array[index] = e;
return old;
}
@Override
public int size()
{
return size;
}
@Override
public void clear()
{
Arrays.fill(array, -1);
size = 0;
}
@Override
public boolean isEmpty()
{
return size == 0;
}
@Override
public boolean contains(Integer e)
{
return indexOf(e) != -1;
}
@Override
public int indexOf(Integer e)
{
for (int i = 0; i < size; i++)
{
if (array[i] == e)
{
return i;
}
}
return -1;
}
@Override
public int lastIndexOf(Integer e)
{
for (int i = size - 1; i >= 0; i--)
{
if (array[i] == e)
{
return i;
}
}
return -1;
}
@Override
public Iterator iterator()
{
return new ArrayListDemo1Iterator(this);
}
}
测试代码:
public class ArrayListDemo1_Main
{
public static void main(String[] args)
{
List list = new ArrayListDemo1();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println("list = " + list); //1,2,3,4
System.out.println("size = " + list.size());//4
list.add(0, 100);
System.out.println("list = " + list);//100,1,2,3,4
System.out.println("size = " + list.size());//5
list.add(5, 200);
System.out.println("list = " + list);//100,1,2,3,4,200
System.out.println("size = " + list.size());//6
try
{
list.add(7, 300);
} catch (IndexOutOfBoundsException e)
{
System.out.println(e);
}
list.remove(3);
System.out.println("list = " + list);//100,1,2,4,200
System.out.println("size = " + list.size());//5
try
{
list.remove(-1);
} catch (IndexOutOfBoundsException e)
{
System.out.println(e);
}
try
{
list.remove(5);
} catch (IndexOutOfBoundsException e)
{
System.out.println(e);
}
System.out.println(list.remove((Integer) 100));
System.out.println("list = " + list);//1,2,4,200
System.out.println("size = " + list.size());//4
System.out.println(list.remove((Integer) 100));
System.out.println("list = " + list);//1,2,4,200
System.out.println("size = " + list.size());//4
System.out.println(list.get(0));
try
{
list.get(-1);
} catch (IndexOutOfBoundsException e)
{
System.out.println(e);
}
System.out.println(list.set(3, 2000));
System.out.println("list = " + list);//1,2,4,2000
System.out.println("size = " + list.size());//4
System.out.println(list.isEmpty());
list.clear();
System.out.println(list.isEmpty());
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
list.add(9);
list.add(10);
System.out.println("list = " + list);
System.out.println("size = " + list.size());//10
list.add(11);
System.out.println("list = " + list);
System.out.println("size = " + list.size());//11
list.add(1);
System.out.println("list = " + list);
System.out.println("size = " + list.size());//12
System.out.println(list.indexOf(1)); //0
System.out.println(list.lastIndexOf(1));//11
System.out.println(list.indexOf(99));//-1
System.out.println(list.lastIndexOf(99));//-1
Iterator it = list.iterator();
while (it.hasNext())
{
System.out.println(it.next());
}
}
}