- 數據結構:線性表, 樹, 圖, 集合等;
- 線性表: 是包含n個相同元素的有限序列;
- 數組是一種:內存連續的線性表;
- 動態數組: 動態的擴容與縮容, (縮容沒有實現);
//方法列表:
public int sise();
public boolean isEmpty();
public boolean contains(int element);
public void add(int element);
public void add(int index, int element);
public int get(int index);
public int set(int index, int element);
public int remove(int element);
public void removeOfIndex(int index);
public void printElements()
/**
* Author: Batac
* 動態數組:
* 數組: 是一種連續存儲結構的線性表;
* 優點: 查詢速度快, 根據地址直接查找到元素(尋址法);
* 缺點: 插入與刪減元素速度差, 最差需要移動其他所有元素
*/
public class ArrayList {
//數組
private int[] elements;
//元素個數
private int size;
//容量
private static int CAPATICY = 10;
//沒有找到指定元素
private static final int ELEMENT_NOT_FOND = -1;
/**
* 有參構造方法
* @param capaticy
*/
public ArrayList(int capaticy){
if (capaticy < CAPATICY)capaticy = CAPATICY;
elements = new int[capaticy];
}
/**
* 無參構造方法
*/
public ArrayList(){
this(CAPATICY);
}
/**
* 設置元素個數
* @return
*/
public int sise(){
return this.size;
}
/**
* 判斷元素是否爲空
* @return
*/
public boolean isEmpty(){
if (this.sise() > 0)return false;
return true;
}
/**
* 判斷元素是否存在
* @param element
* @return
*/
public boolean contains(int element){
int index = indexOf(element);
if (index == ELEMENT_NOT_FOND)return false;
return true;
}
/**
* 添加元素
* @param element
*/
public void add(int element){
add(size,element);
}
/**
* 獲取指定索引出元素
* @param index
* @return
*/
public int get(int index){
indexOutOfBoundsExceptioni(index);
return elements[index];
}
/**
* 設置元素到指定位置
* @param index
* @param element
* @return
*/
public int set(int index, int element){
indexOutOfBoundsExceptioni(index);
add(index,element);
return -1;
}
/**
* 添加元素到指定位置
* @param index
* @param element
*/
public void add(int index, int element){
changeCapaticy();//擴容或者縮容
indexOutOfBoundsExceptioni(index);//判斷索引是否越界
for (int i=size;i>index;i--){
elements[i] = elements[i-1];
}
elements[index] = element;
size++;
}
/**
* size爲0的時候,直接將所有索引清楚
*/
public void clear(){
size = 0;
//縮容
}
/**
* 刪除元素
* @param element
* @return
*/
public int remove(int element){
//查找元素所在位置
int index = indexOf(element);
if (index == ELEMENT_NOT_FOND){
return ELEMENT_NOT_FOND;
}
//刪除元素
removeOfIndex(index);
return index;
}
/**
* 獲取元素索引
* @param element
* @return
*/
private int indexOf(int element){
for (int i=0;i<size;i++){
int ele = elements[i];
if (ele == element){
return i;
}
}
return ELEMENT_NOT_FOND;
}
/**
* 擴容獲取縮容
*/
private void changeCapaticy(){
if (size+1 == CAPATICY){
CAPATICY += 10;
System.out.println("擴容:"+CAPATICY+",size:"+size);
}else{
return;
}
int[] temps = new int[CAPATICY];
for (int i=0;i<size;i++){
temps[i] = elements[i];
}
elements = temps;
}
/**
* 判斷索引是否合法 -> 內部使用
* @param index
*/
private void indexOutOfBoundsExceptioni(int index){
if (index < 0 || index > size){
throw new IndexOutOfBoundsException("index:"+index+",Size:"+size);
}
}
/**
* 刪除指定索引的元素
* @param index
*/
public void removeOfIndex(int index){
indexOutOfBoundsExceptioni(index);
for (int i=index;i<size;i++){
elements[i] = elements[i+1];
}
size--;
}
/**
* 打印內容
*/
public void printElements(){
String str = "[";
for (int i=0;i<size;i++){
// System.out.println(elements[i]+"");
if (i == size-1){
str += elements[i]+"";
}else{
str = str+elements[i]+",";
}
}
str += "]";
System.out.println(str);
}
}