《Java语言程序设计》P327
题目要求使用数组来模拟实现ArrayList的一些方法,并要求可以根据实际长度来实现数组自动增长,这里只贴出LikeArrayList.java
测试方法已经在本地写过,有点杂乱就不再贴出。
缺陷:无法实现自增长;基于String为数组类型的设计,数组若为其他类型,有些方法会不能正常工作。
改进:判断数组类型,并作出相应的解决方案的写法已经想好,实现起来应该不难,但考虑到比较繁琐费时,不再添加。
Ps.LikeArrayList方法可以改写成:
public void LikeArrayList() { Object[] ArrayLi = new Object[20]; ArrayLiLike = ArrayLi; }
似乎没有什么变化,若实现自增长,可以尝试在LikeArrayList方法上做改动,还没想好解决方案。
话说回来,如果要实现自增长,为何不直接用java.util.ArrayList?
public class LikeArrayList { private Object[] ArrayLiLike = new Object[20]; public void LikeArrayList() { } public void add(Object n){ int m =0; for (int i = 0; i < ArrayLiLike.length; i++) { if(ArrayLiLike[i] == null){ m = i; break; } } ArrayLiLike[m] = n; } public void add(int p , Object n){ ArrayLiLike[p] = n; } public void clear(){ for (int i = 0; i < ArrayLiLike.length; i++) { ArrayLiLike[i] = null; } } public boolean contains(Object h){ boolean c = false; for (int i = 0; i < ArrayLiLike.length; i++) { if (ArrayLiLike[i] == h) { c = true; } } return c; } public Object get(int b){ return ArrayLiLike[b]; } public int indexOf(Object w){ int a = 0; for (int i = 0; i < ArrayLiLike.length; i++) { if(ArrayLiLike[i] == w){ a = i; break; } } return a; } public boolean isEmpty(){ boolean is = true; for (int i = 0; i < ArrayLiLike.length; i++) { if(ArrayLiLike[i] != null){ is = false; break; } } return is; } public int lastIndexOf(Object w){ int a = 0; for (int i = 0; i < ArrayLiLike.length; i++) { if(ArrayLiLike[i] == w){ a = i; continue; } } return a; } public boolean remove(Object re){ boolean in = false; for (int i = 0; i < ArrayLiLike.length; i++) { if(ArrayLiLike[i] == re){ in = true; ArrayLiLike[i] = null; break; } } return in; } public int size(){ return ArrayLiLike.length+1; } public boolean remove(int re){ boolean in = false; if (ArrayLiLike[re] != null){ in = true; ArrayLiLike[re] = null; }else{ in = false; } return in; } public Object set(int p, Object o){ ArrayLiLike[p] = o; return ArrayLiLike[p]; } public String toString(){ String s = new String(); for (int i = 0; i < ArrayLiLike.length; i++) { s += ArrayLiLike[i] + " "; } return s; } }