陣列的增刪改查和擴容

2021-09-25 10:00:21 字數 3695 閱讀 9522

public class array

//無參建構函式,預設陣列的容量capacity = 10

public array()

//獲取陣列中元素的個數

public int getsize()

//獲取陣列的容量

public int getcapacity()

public boolean isempty()

public void add(int index,e  e) 

if(size == data.length)

for(int i = size - 1;i >= index;i--)

data[index] = e;

size++; }

public e remove(int index)

e ret = data[index];

for(int i = index+1; i < size; i++)

size--;

data[size] = null;//無用記憶體 != 記憶體洩漏

if(size == data.length/4 && data.length/2 != 0)

return ret;

}

}

陣列的查詢相對於較為容易,這是由於陣列有下標,查詢效率較高,但是陣列的缺點就是增刪除元素時,原陣列會發生變動,所以陣列就不能保持原來的陣列,還有就是陣列的容量是固定的,因此加入你的元素個數超出了陣列的容量那麼他就會出錯,陣列是不會自動擴容的。

一、陣列增加元素

陣列的增加元素又分為在最前面,最後面,任意位置增加元素

1.陣列在最前面增加元素(add方法是在下標為index位置增加元素,因為重複次數太多我就不一次次寫了,直接放在最上面,公共的都放在最上面)

新增時需要考慮,陣列的容量是不是已經滿了,如果是陣列的容量滿了那麼丟擲乙個throw new illegalargumentexception(「新增失敗,陣列已經滿了」);了的異常,如果容量足夠那麼新增的時候每乙個數都要相應的往後移,因為陣列會採取覆蓋的方法,直接覆蓋原來的數,因此陣列的查,改很容易。因此陣列增加元素最關鍵的點就在這裡,其實這個關鍵點說難也不難,就是把迴圈遍歷陣列讓元素往後移無非就是下標對應都加一,讓前面元素的下標等於後面元素的下標這樣就實現了往後移的操作。實現**如下,在最前面增加元素就是讓他的index = 0就好了。

//向所有元素前新增乙個新的元素

public void addfirst(e e)

2陣列在最後新增元素.相對較為容易,不存在像前面說的元素移動,這個關鍵在於陣列是不是已經滿了相應的也會丟擲throw new illegalargumentexception(「新增失敗,陣列已經滿了」);這樣的異常,實現**如下。對應的讓他的index = size(陣列中有多少元素)

public void addlast(e e)

3.陣列index位置新增元素,這個和在最前面新增元素差不多的道理,這個也像前面一樣需要判斷陣列是不是已經滿了也要丟擲throw new illegalargumentexception(「新增失敗,陣列已經滿了」)異常,這樣直接讓他的index = 想要新增元素的下標。對應的實現**如下:

public void add(int index,e e)

if(size == data.length)

for(int i = size - 1;i >= index;i--)

data[index] = e;

size++; }

二、陣列的刪除元素

陣列增加有三個位置,那麼陣列的刪除也有三個位置

1.陣列在最前面刪除元素

因為陣列具有覆蓋性,所以吧刪除乙個元素無非就是讓後面元素把那個元素覆蓋了然後對應的元素往前移,因為前面的元素前移所以會有空的位置然後後面的元素進行覆蓋不會有其他的資料丟失,但是這裡也有問題,那就是你覆蓋的元素下標是不是這個陣列中的,如果陣列中本來就沒有這個下標那麼就會丟擲throw new illegalargumentexception("獲取失敗,索引有問題");,但是最後的關鍵問題就是我們要注意既然陣列刪除了乙個元素,那麼對應的陣列的元素就要減一,在刪除最前面元素那麼就是index=0;實現**如下

//從陣列中刪除第乙個元素,返回刪除的元素

public e removefirst()

2.在刪除陣列最後的元素元素,同樣較為簡單不需要進行下標的變換所以只用考慮下標是不是合理,以及陣列的元素進行減一,刪除最後乙個元素,就是index = size;實現**如下:

//從陣列中刪除最後乙個元素,返回刪除的元素

public e removelast()

3.刪除陣列index位置的元素,類似於刪除最前面的元素,注意下標的合理性,以及size減一就好了,index = 對應的下標位置 實現**如下

//從陣列中刪除index位置的元素,返回刪除的元素

public e remove(int index)

e ret = data[index];

for(int i = index+1; i < size; i++)

size--;

data[size] = null;//無用記憶體 != 記憶體洩漏

if(size == data.length/4 && data.length/2 != 0)

return ret;

}三、 陣列元素的查詢

因為陣列有下標所以相應的元素的查詢變得很容易,這個只要考慮他的下標是不是存在,元素是不是存在,然後返回對應元素的下標,就可以快速準確地查詢到元素的位置,實現**如下:

//查詢陣列中是否有元素e

public boolean contains(e e)

} return false;

}//查詢陣列元素e所在的索引,如果不存在元素e,則返回-1

public int find(e e)

} return -1;

}//獲取index索引位置的元素

e get(int index)

return data[index];

}

四、陣列元素的修改

因為陣列具有覆蓋性,因此對於陣列的修改變得很容易,修改乙個中的乙個元素就是給他重新賦值,這個不像增加、刪除元素,不需要對應元素下標的改變,只用考慮陣列的下標是不是合理,元素是不是存在。實現**如下

//修改index索引位置的元素為e

void set(int index,e e)

data[index] = e;

}五、陣列的擴容

陣列的就是儲存資料的乙個容器,那麼對於乙個容器來說容量都會有超出的時候,那麼這個時候就不能往裡面再進行儲存了,陣列也是這樣,他不會自動擴容,那麼我們如果有很多的元素去儲存在裡面,我們還要一遍遍的重新定義他的容量,那麼太過於麻煩,所以我們需要讓它自動擴容,因此我們就得寫乙個方法這個方法原理就是假如陣列的容量已經滿了那麼我們將他的容量進行擴大,對應的我們也可以縮小他的容量,例如元素很少,卻要儲存在容量很大陣列中,那麼會浪費許多的記憶體,因此我們要對他進行縮容,也就是元素假如是容量的一般的時候,容量對應縮小為原來的二分之一(我這裡是二分之一,也可使用別的倍數),實現**如下

private void resize(int newcapatity)

data = newdata;

}if(size == data.length/4 && data.length/2 != 0)

這就是我理解的陣列的增刪改查以及擴容,不喜勿噴,謝謝!

陣列的增刪改查

陣列不可刪,如何實現刪除,就需要利用陣列遍歷時的特性 陣列遍歷如果最後乙個索引內容為空,那麼遍歷就不會顯示出來,利用這一特性,我們可以實現視覺上的刪除,實際陣列長度沒有改變,具體如下 實現思路 當前要刪除的元素對應的索引如果後面還有元素,就要把後面的元素集體下標向前移.陣列縮容 flights ar...

增刪改查 JS陣列增刪改查這點事兒

1 length屬性 length屬性是陣列最重要的屬性,沒有之一,length屬性告訴我們這個陣列內有多少個資料元素,當length 0時說明陣列時乙個空陣列。我們想要遍歷陣列時可以直接將遍歷的終點設為 length 1。這是本文的重點,我們從增刪改查方面入手,梳理方法的作用和用法,有利於記憶和使...

Java陣列 增刪改查

一 陣列的增加 陣列新增元素 把元素放在陣列中間的某個位置 int arr 要新增的元素 100 位置 下標為3 1 新建乙個陣列,長度是原陣列長度 1 2 先拿到下標為3的前面的元素,放到新陣列按照0 1 2 順序依次存放 3 把要新增的元素100放入新陣列下標為3的位置 4 拿到下標為3的後面的...