JAVA基於陣列實現集合和基於連結串列實現集合
阿新 • • 發佈:2019-01-23
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); } }