packagexxj.datastructure0810;importjava.util.Random;public classDataStructure {
public static voidmain(String[] args) {
String [] array= {"1","2","3"};
MyArrayList mal = new MyArrayListImpl();//mal.add(100);//mal.add(new Object());
for(int i=0;i
mal.add(array[i]);
}
Random rand= newRandom();int size = rand.nextInt(20);for(int i=0;i
mal.add(""+((char)(rand.nextInt(26)+97)));
}
System.out.println("size = "+size);for(int i=0;i
System.out.println(mal.get(i));
}
}
}
packagexxj.datastructure0810;
public interface MyArrayList{
public voidadd(E e);
public boolean add(intindex,E e);
public E remove(intindex);
public booleanremove(E e);
public boolean update(intindex,E e);
public booleanupdate(E oldE,E e);
public intsize();
public E get(intindex);
}
packagexxj.datastructure0810;
public class MyArrayListImpl implements MyArrayList{//聲明一個數組名
privateObject[] array;//聲明一個記錄存儲元素總數的屬性名
private intsize;
publicMyArrayListImpl() {
array= new Object[1];
}//public MyArrayListImpl(int i){//array = new String[i];//}
public voidadd(E e) {if (size == 0)
array[0] =e;else{//根據所添加元素的的個數來建立新的數組,新數組的長度是size+1
Object[] newArray = new Object[size + 1];//将新元素str添加到newArray數組的末尾
newArray[size] =e;//将原始數組中的資料存入到新數組中
for (int i = 0; i < size; i++) {
newArray[i]=array[i];
}//新數組的位址賦給原始數組
array =newArray;
}//記錄元素總數增加1.
size++;
}
public boolean add(intindex, E e) {return false;
}
public E remove(intindex) {return null;
}
public booleanremove(E e) {return false;
}public booleanremoveAll(E e) {return false;
}
public boolean update(intindex, E e) {return false;
}
public booleanupdate(E oldE, E e) {return false;
}
public intsize() {returnsize;
}
public E get(intindex) {if (index < 0 || index >=size)return null;return(E)array[index];
}
}
1.數組:
數組是屬于資料結構中的一種線性結構。
資料對象在記憶體中的儲存方式是一種線性結構。
數組定義的方式:
資料類型 [] 數組名 = new 資料類型[長度];
資料類型 [] 數組名 = {資料,...};
資料類型 [] 數組名 = new 資料類型[]{資料,...};
資料類型 [] 數組名;
數組名 = new 資料類型[長度];
數組名 = new 資料類型[]{資料,...};
//錯誤示範
數組名 = {資料,。。。}
資料類型 [][] 數組名 = new 資料類型[行][列];
資料類型 [][] 數組名 = {{資料,...},...};
數組是否是一個類?
是的
數組是類,那麼肯定提供了屬性和方法,那麼數組有哪些屬性和方法呢?
數組隻有一個唯一的length屬性,該屬性是用來擷取數組長度
擷取或設定一維數組中某一個位置的資料:數組名[下标]
擷取一維數組能存儲多少個元素:數組名.length
擷取或設定二維數組中某一個位置的資料:數組名[行下标][列下标]
擷取二維數組的行數:數組名.length
擷取二維數組的列數:數組名[行下标].length
擷取二維數組能存儲多少個元素:
數組名.length*數組名[行下标].length //不适用于所有情況
數組名[行下标].length+...
除了0可以直接給數字之外,其他的都通過length來擷取
數組下标隻會從0開始。
2.數組隊列
1.數組有什麼優點和缺點?
優點:
存取資料是所有資料結構中速度最快的一種,你在擷取或設定資料時,
可以直接通過下标定位。
缺點:
如果你要存儲的資料不确定時,數組在建立時需要給予的長度就是缺點。
1.建立數組小了,存儲不下資料
2.建立數組大了,浪費記憶體空間
如果在項目中特定情況下隻能存儲一種資料類型;在項目的兩一個位置
需要存儲N種資料類型;這樣數組在建立時需要指定固定的類型就會是缺點。
2.數組隊列的實作
數組隊列的實作原理:借助于數組名中存儲的是數組對象在記憶體中的首位址。
interface MyArrayList.java 父接口,定義數組中所需要實作的方法
class MyArrayListImpl.java 子類,實作接口中所有的抽象方法。
使用泛型來解決第二個問題。
泛型是Java中的一種特殊符号,不能把它當做任何一個種資料類型。
但是它可以泛指Java所有的資料類型(基本資料類型,引用類型)。
Java中的泛型有E(元素)、K(鍵)、V(值)。