分析:
1. 實作一個能自動擴容的Array,基于數組實作
2. 有增删改查操作
3. 類似一個Arraylist結合,支援範型
1.構造函數
private E[] mDatas;
private int size;
public Array(int capacity){
mDatas = (E[]) new Object[capacity];
size = ;
}
public Array(){
this();
}
2. 添加資料
/**
* 指定位置添加資料 能自動擴容
* @param index
* @param e
*/
public void add(int index,E e){
assertIndex(index);
//如果size == 數組的容量大小了 ,就把數組大小擴容為原來的兩倍
if(size == mDatas.length){
resize( * size);
}
//往指定位置添加元素 就是把指定位置的元素都往右移 不過要從最後一個數開始移動 直到index
for (int i = size - ; i >= index; i--) {
mDatas[i + ] = mDatas[i];
}
mDatas[index] = e;
size ++;
}
public void addFirst(E e){
add(,e);
}
public void addLast(E e){
add(size,e);
}
3. 删除資料
/**
* 移除某一個位置的元素
* @param index
* @return
*/
public E remove(int index){
assertIndex(index);
E temp = mDatas[index];
//删除某一個位置的元素就是從右往左移 把這個位置的元素用後面的元素覆寫掉
for (int i = index + ; i < size; i++) {
mDatas[i - ] = mDatas[i];
}
size--;
// mDatas[index] = null;
return temp;
}
/**
* 删除頭部元素
* @return
*/
public E removeFirst(){
return remove();
}
/**
* 删除尾部元素
* @return
*/
public E removeLast(){
return remove(size - );
}
/**
* 移除某一個元素 先查找這個元素 查找到元素了根據位置去删除
* @param e
* @return
*/
public E removeElement(E e){
int index = findIndex(e);
if(index != -){
return remove(index);
}
return null;
}
4. 修改資料
/**
* 修改某一個位置的元素
* @param index
* @param e
*/
public void set(int index,E e){
assertIndex(index);
mDatas[index] = e;
}
5. 查詢資料
/**
* 擷取索引處的元素
* @param index
* @return
*/
public E get(int index){
assertIndex(index);
return mDatas[index];
}
public E getLast(){
return get(size - );
}
public E getFirst(){
return get();
}
/**
* 根據元素查找元素索引
* @param e
* @return
*/
public int findIndex(E e){
for (int i = ; i < mDatas.length; i++) {
if(e.equals(mDatas[i])){
return i;
}
}
return -;
}
/**
* 根據索引查找元素
* @param index
* @return
*/
public E find(int index){
assertIndex(index);
for (int i = ; i < mDatas.length; i++) {
if(mDatas[index].equals(mDatas[i])){
return mDatas[i];
}
}
return null;
}
6. 數組擴容
/**
* 擴容的函數
* @param capacity
*/
private void resize(int capacity) {
E[] newData = (E[]) new Object[capacity];
for (int i = ; i < size; i++) {
newData[i] = mDatas[i];
}
//擴容後的數組指派給原始數組
mDatas = newData;
}
7. 小結
其實就是針對數組的操作
8.聯系方式
QQ:1509815887