1.數(shù)組有什么優(yōu)點(diǎn)和缺點(diǎn)?
優(yōu)點(diǎn):
存取數(shù)據(jù)是所有數(shù)據(jù)結(jié)構(gòu)中速度最快的一種荚醒,你在獲取或設(shè)置數(shù)據(jù)時(shí)芋类,
可以直接通過下標(biāo)定位。
缺點(diǎn):
如果你要存儲的數(shù)據(jù)不確定時(shí)界阁,數(shù)組在創(chuàng)建時(shí)需要給予的長度就是缺點(diǎn)侯繁。
1.創(chuàng)建數(shù)組小了,存儲不下數(shù)據(jù)
2.創(chuàng)建數(shù)組大了泡躯,浪費(fèi)內(nèi)存空間
如果在項(xiàng)目中特定情況下只能存儲一種數(shù)據(jù)類型贮竟;在項(xiàng)目的兩一個(gè)位置
需要存儲N種數(shù)據(jù)類型;這樣數(shù)組在創(chuàng)建時(shí)需要指定固定的類型就會(huì)是缺點(diǎn)较剃。
2.數(shù)組隊(duì)列的實(shí)現(xiàn)
數(shù)組隊(duì)列的實(shí)現(xiàn)原理:借助于數(shù)組名中存儲的是數(shù)組對象在內(nèi)存中的首地址咕别。
interface MyArrayList.java 父接口,定義數(shù)組中所需要實(shí)現(xiàn)的方法
class MyArrayListImpl.java 子類写穴,實(shí)現(xiàn)接口中所有的抽象方法惰拱。
使用泛型來解決第二個(gè)問題。
泛型是Java中的一種特殊符號啊送,不能把它當(dāng)做任何一個(gè)種數(shù)據(jù)類型偿短。
但是它可以泛指Java所有的數(shù)據(jù)類型(基本數(shù)據(jù)類型,引用類型)馋没。
Java中的泛型有E(元素)昔逗、K(鍵)、V(值)篷朵。
public class MyArrayListImplimplements MyArrayList{
// 聲明一個(gè)數(shù)組名
private Object[] array;
// 聲明一個(gè)記錄存儲元素總數(shù)的屬性名
private int size;
/**
* 構(gòu)造方法
*/
public MyArrayListImpl() {
array = new Object[1];
}
// public MyArrayListImpl(int i){
// array = new String[i];
// }
/**
* 添加元素到數(shù)組隊(duì)列中的方法
*
* @param e要添加的元素
*/
public void add(E e) {
if (size == 0)
array[0] = e;
else {
// 根據(jù)所添加元素的的個(gè)數(shù)來創(chuàng)建新的數(shù)組勾怒,新數(shù)組的長度是size+1
Object[] newArray = new Object[size + 1];
// 將新元素str添加到newArray數(shù)組的末尾
newArray[size] = e;
// 將原始數(shù)組中的數(shù)據(jù)存入到新數(shù)組中
for (int i = 0; i < size; i++) {
newArray[i] = array[i];
}
// 新數(shù)組的地址賦給原始數(shù)組
array = newArray;
}
// 記錄元素總數(shù)增加1.
size++;
}
/**
* 向數(shù)組隊(duì)列中指定的位置插入一個(gè)新的元素
*
* @param index要插入元素的所在的索引位置
* @param e要插入的新元素
* @return 返回true表示插入成功婆排,返回false表示插入失敗
*/
public boolean add(int index, E e) {
return false;
}
/**
* 根據(jù)指定的索引位置,從數(shù)組隊(duì)列中移除一個(gè)元素
*
* @param index要移除元素所在的索引位置
* @return 返回null表示移除失敗笔链,否則會(huì)返回移除的元素
*/
public E remove(int index) {
return null;
}
/**
* 移除指定的元素
*
* @param e要移除的元素
* @return 返回值true表示執(zhí)行成功段只,返回false表示執(zhí)行失敗
*/
public boolean remove(E e) {
return false;
}
public boolean removeAll(E e) {
return false;
}
/**
* 修改指定索引位置的元素
*
* @param index要修改元素的位置
* @param e新的元素
* @return 返回值true表示執(zhí)行成功,返回false表示執(zhí)行失敗
*/
public boolean update(int index, E e) {
return false;
}
/**
* 修改指定元素的內(nèi)容
*
* @param oldE要修改的元素
* @param e新的元素
* @return 返回值true表示執(zhí)行成功卡乾,返回false表示執(zhí)行失敗
*/
public boolean update(E oldE, E e) {
return false;
}
/**
* 獲取數(shù)組隊(duì)列中存儲的元素總數(shù)
*
* @return 返回?cái)?shù)組隊(duì)列中存儲的元素總數(shù)屬性
*/
public int size() {
return size;
}
/**
* 獲取指定索引位置的元素
*
* @param index要獲取元素的索引位置
* @return 返回null表示獲取失敗翼悴,否則會(huì)返回獲取到的元素
*/
public E get(int index) {
if (index < 0 || index >= size)
return null;
return (E)array[index];
}
}