1. 程式人生 > >Java大用處——動態陣列的實現

Java大用處——動態陣列的實現

陣列大家平常都用,陣列雖然有優點但是最讓我不爽的就是它的定長。

有人會說,那就用連結串列啊,連結串列插入,刪除是方便,但是遍歷速度慢。

所以,我就想寫一個動態的陣列。

原理是這樣的,當你想增加陣列大小時,我們就另外開一個你想要的陣列,把以前的那個陣列放入其中即可。

具體程式碼實現:

package com.newer.tw.com;


/**
 * 自定義長度可變陣列
 * 
 * @author Administrator
 * 
 */
public class MyList {
	// 定義一個初始長度為0的陣列,用來快取資料
	private String[] src = new String[0];
	// 增加
	public void add(String s) {
		//定義新陣列,長度是原陣列長度+1
		String[] dest = new String[src.length+1];
		//將原陣列的資料拷貝到新陣列
		System.arraycopy(src, 0, dest, 0, src.length);
		//將新元素放到dest陣列的末尾
		dest[src.length]=s;
		//將src指向dest
		src=dest;
	}
	// 修改指定位置的元素
	public void modify(int index, String s) {
		src[index]=s;
	}
	// 刪除指定位置的元素
	public void delete(int index) {
		String[] dest = new String[src.length-1];
		//將原陣列的資料拷貝到新陣列
		System.arraycopy(src, 0, dest, 0, index);
		System.arraycopy(src, index+1, dest, index, src.length-1-index);
		src=dest;
	}
	// 獲得指定位置的元素
	public String get(int index) {
		return src[index];
	}
	// 在指定位置插入指定元素
	public void insert(int index, String s) {
		//定義新陣列,長度是原陣列長度+1
		String[] dest = new String[src.length+1];
		//將原陣列的資料拷貝到新陣列
		System.arraycopy(src, 0, dest, 0, index);
		dest[index]=s;
		System.arraycopy(src, index, dest, index+1, src.length-index);
		src=dest;
		
	}
	// 獲得元素個數
	public int size() {
		return src.length;
	}
	
	public void print()
	{
		for(int i=0;i<size();i++)
			System.out.println(src[i]);
	}
	
	public static void main(String[] args)
	{
		MyList m=new MyList();
		m.add("15");
		m.add("16");
		m.add("17");
		m.add("18");
		m.add("19");
		System.out.println("插入之前:");
		m.print();
		m.insert(2,"22");
		System.out.println("插入之後:");
		m.print();	
	}

}
程式結果:

插入之前:
15
16
17
18
19
插入之後:
15
16
22
17
18
19
就不一一測試了。

以上就是實現了一個動態陣列的功能,其實C語言可以實現,下次寫一個。

Java,C++中,提供了容器,就不用自己寫這些了。