1. 程式人生 > >JAVA基於陣列實現集合和基於連結串列實現集合

JAVA基於陣列實現集合和基於連結串列實現集合

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);		
	}
}