1.定义一个接口MyList
public interface MyList { //增 void add(int num); //删 boolean delete(int index2); //改 boolean update(int index2, int num); //获得值 int get(int index2); //获得长度 int getLen(); }
2.写一个类实现MyList接口,基于数组实现集合。
public class MyList4Array implements MyList { int[] arr; int index; public MyList4Array(){ arr = new int[10]; index = 0; } //增 public void add(int num){ if(index==arr.length){ //数组扩容 arr = Arrays.copyOf(arr, arr.length*2); } arr[index] = num; index++; } //删 public boolean delete(int index2){ if(index2<0 || index2>=this.index){ return false; } for(int i=index2+1;i<this.index;i++){ arr[i-1] = arr[i]; } index--; arr[index] = 0; return true; } //改 public boolean update(int index2,int num){ if(index2>=0 && index2<this.index){ arr[index2] = num; return true; } return false; } //查找 public int get(int index2){ if(index2>=0 && index2<this.index){ return arr[index2]; } throw new RuntimeErrorException(null, "下标越界!"); } //获得数组长度 public int getLen(){ return this.index; } //重写toString方法 public String toString(){ StringBuffer sb = new StringBuffer(); int len = this.index; for(int i=0;i<len;i++){ sb.append(arr[i]); sb.append(","); } sb.delete(sb.length()-1, sb.length()); return sb.toString(); } }
3.写一个类实现MyList接口,基于链表实现集合。
public class MyList4Link implements MyList{ public class Node{ public int num; public Node next; } Node start; Node index; int count; public MyList4Link(){ start = new Node(); index = start; count =0; } //增 public void add(int num) { Node newNode = new Node(); newNode.num = num; index.next = newNode; index = newNode; count++; } //删 public boolean delete(int index2) { if(index2>=0 && index2<count){ Node temNode =start; for(int i=0;i<index2;i++){ temNode = temNode.next; } temNode.next = temNode.next.next; count--; return true; } return false; } //改 public boolean update(int index2, int num) { if(index2>=0 && index2<count){ Node temNode = start; for(int i=0;i<=index2;i++){ temNode = temNode.next; } temNode.num = num; return true; } return false; } //查找 public int get(int index2) { // TODO Auto-generated method stub Node temNode = start; for(int i=0;i<=index2;i++){ temNode = temNode.next; } return temNode.num; } //获得链表长度 public int getLen() { return count; } @Override public String toString() { StringBuffer sb = new StringBuffer(); Node temNode = start; for(int i=0;i<count;i++){ temNode = temNode.next; sb.append(temNode.num); sb.append(","); } sb.delete(sb.length()-1, sb.length()); return "MyList4Link ["+sb.toString()+"]"; } }
4.测试类
public class MyListTest { public static void main(String[] args) { System.out.println("数组"); MyList mylist = new MyList4Array(); for(int i=0;i<10;i++){ mylist.add(i); } System.out.println(mylist); System.out.println(mylist.getLen()); mylist.add(11); System.out.println(mylist); mylist.delete(0); System.out.println(mylist); mylist.update(9, 99); System.out.println(mylist); System.out.println(mylist.get(0)); System.out.println("*********"); System.out.println("链表"); MyList list = new MyList4Link(); for(int i=0;i<10;i++){ list.add(i); } System.out.println(list); list.delete(2); list.update(3,11); System.out.println(list.get(2)); System.out.println(list); } }