如何從數組中刪除項目,然後將數組的大小調整爲較小的大小? 同樣,如果我需要添加另一個項目,如何增加容量?從數組和縮小數組中刪除項目
回答
不能調整陣列本身,但您可以創建一個新的數組,並有效地利用了一些實用功能像這樣從舊陣列到新的數組中的元素複製:
public static int[] removeElement(int[] original, int element){
int[] n = new int[original.length - 1];
System.arraycopy(original, 0, n, 0, element);
System.arraycopy(original, element+1, n, element, original.length - element-1);
return n;
}
一但是,更好的方法是使用ArrayList(或類似的List結構)來存儲數據,然後使用其方法根據需要刪除元素。
object[] newarray = new object[oldarray.Length-1];
for(int x=0; x < array.Length; x++)
{
if(!(array[x] == value_of_array_to_delete))
// if(!(x == array_index_to_delete))
{
newarray[x] = oldarray[x];
}
}
在創建數組後,無法縮小數組的大小,但可以將數組複製到另一個較小數組。
如果我只是想忽略一個640字節數組的最後一個字節...... – aProgrammer 2012-08-21 11:30:51
那麼你的實例化就是`object [] new array = new object [oldarray.Length-2];`for循環負責增量。 – Mike 2012-08-21 13:48:32
我的意思是..我們是否需要創建一個新的數組,即使我們只是想忽略一個字節..我們不能縮小陣列嗎? – aProgrammer 2012-08-22 09:32:32
Java數組的大小在分配時是固定的,無法更改。
如果你想「成長」或「收縮」現有的陣列,你必須分配適當大小的新數組和複製的數組元素;例如使用
System.arraycopy(...)
或Arrays.copyOf(...)
。複製循環也起作用,儘管它看起來有點笨重......海事組織。如果你想從一個數組中刪除一個或多個項目(在真正的意義上......不只是用
null
來代替它們),你需要分配一個新的更小的數組並複製你想要的元素保留。
有在第三方庫的形式(例如Apache的百科全書ArrayUtils
)的替代品,但你可能要考慮是否有必要增加庫相關只是一種方法的緣故,你可以用5-10行代碼實現自己。
這是更好(即簡單...和在許多情況下,更有效的)使用List
類而不是陣列。這將會照顧(至少)增長後備存儲。還有一些操作可以在列表中的任何位置插入和刪除元素。
例如,ArrayList
類使用數組作爲後盾,並根據需要自動增長數組。它不會自動減小後備陣列的大小,但可以使用trimToSize()
方法告訴它執行此操作;例如
ArrayList l = ...
l.remove(21);
l.trimToSize(); // Only do this if you really have to.
1 - 我說的是「在很多情況下更有效」,因爲ArrayList
使用一個簡單的「雙重規模」的策略時,它需要成長的支持數組。這意味着如果通過重複附加到列表來增加列表,每個元素將平均複製一次。相比之下,如果你對數組做了這樣的操作,你最終會將每個數組元素的拷貝數平均接近N/2次。
不使用System.arraycopy方法可以從一個數組具有下列
int i = 0;
int x = 0;
while(i < oldArray.length){
if(oldArray[i] == 3)i++;
intArray[x] = oldArray[i];
i++;
x++;
}
刪除的元素,其中圖3是要刪除的值。
從org.apache.commons.lang使用ArrayUtils.removeElement(Object[],Object)
是迄今爲止最簡單的方法。
int[] numbers = {1,2,3,4,5,6,7};
//removing number 1
numbers =(int[])ArrayUtils.removeElement(numbers, 1);
我已經創建了這個函數或類。林還挺新的,但我的朋友需要,這也讓我創造了這個:
public String[] name(int index, String[] z){
if(index > z.length){
return z;
} else {
String[] returnThis = new String[z.length - 1];
int newIndex = 0;
for(int i = 0; i < z.length; i++){
if(i != index){
returnThis[newIndex] = z[i];
newIndex++;
}
}
return returnThis;
}
}
由於其漂亮的revelant,我想我會在這裏發佈。
由於數組具有創建時分配的固定大小,因此唯一的選擇是創建一個沒有要移除的元素的新數組。
如果你想刪除的元素是最後一個數組元素,這成爲容易使用Arrays.copy
實現:
int a[] = { 1, 2, 3};
a = Arrays.copyOf(a, 2);
運行上面的代碼後,現在將指向只包含一個新的陣列1, 2.
否則,如果您要刪除的元素不是最後一個元素,則需要創建一個大小爲1的新數組,並將所有項目複製到它,但要刪除的項目除外。
上述方法效率不高。如果您需要管理內存中可變項目列表,最好使用列表。具體地,LinkedList
將從O(1)
的列表中移除項目(理論上可能最快)。
您可以在創建數組時通過增加數組的大小來擴展數組,或者也可以在創建後更改大小,但要縮小或刪除元素。不創建新陣列的替代解決方案,可能是:
package sample;
public class Delete {
int i;
int h=0;
int n=10;
int[] a;
public Delete()
{
a = new int[10];
a[0]=-1;
a[1]=-1;
a[2]=-1;
a[3]=10;
a[4]=20;
a[5]=30;
a[6]=40;
a[7]=50;
a[8]=60;
a[9]=70;
}
public void shrinkArray()
{
for(i=0;i<n;i++)
{
if(a[i]==-1)
h++;
else
break;
}
while(h>0)
{
for(i=h;i<n;i++)
{
a[i-1]=a[i];
}
h--;
n--;
}
System.out.println(n);
}
public void display()
{
for(i=0;i<n;i++)
{
System.out.println(a[i]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Delete obj = new Delete();
obj.shrinkArray();
obj.display();
}
}
請評論任何錯誤!
沒有使用任何預先定義的函數以及效率:--- >>
public static void Delete(int d , int[] array)
{
Scanner in = new Scanner (System.in);
int i , size = array.length;
System.out.println("ENTER THE VALUE TO DELETE? ");
d = in.nextInt();
for (i=0;i< size;i++)
{
if (array[i] == d)
{
int[] arr3 =new int[size-1];
int[] arr4 = new int[i];
int[] arr5 = new int[size-i-1];
for (int a =0 ;a<i;a++)
{
arr4[a]=array[a];
arr3[a] = arr4[a];
}
for (int a =i ;a<size-1;a++)
{
arr5[a-i] = array[a+1];
arr3[a] = arr5[a-i];
}
System.out.println(Arrays.toString(arr3));
}
else System.out.println("************");
}
}
- 1. 從數組中刪除數組項目
- 2. 從JavaScript中移除項目從數組中刪除項目
- 3. 從通用數組中刪除項目
- 4. PowerShell從數組中刪除項目[0]
- 5. 從數組列表中刪除項目
- 6. 從數組中刪除項目jQuery
- 7. 從數組中刪除多個項目
- 8. 從Laravel Session數組中刪除項目
- 9. 從ListPreference中刪除數組項目
- 10. 從陣列中刪除項目數組
- 11. jQuery從數組中刪除項目
- 12. 從動態數組中刪除項目
- 13. C#從類數組中刪除項目
- 14. 從數組中刪除項目?
- 15. PHP從數組中刪除項目
- 16. Xcode - 如何從數組中的數組中刪除項目?
- 17. 啪從數組刪除項目
- 18. 刪除一個項目從數組
- 19. 刪除和添加項目到數組?
- 20. 刪除一個項目從數組另一個數組
- 21. 刪除PHP數組中項目的.htm
- 22. 刪除數組中的特定項目
- 23. 如何刪除數組中的項目
- 24. 刪除會話數組中的項目
- 25. 刪除數組中的項目
- 26. 使用Mongoid和Rails從Mongo數組中刪除項目
- 27. 從數組刪除對象沒有被完全刪除項目
- 28. 如何從數組中刪除數組?
- 29. Bash腳本 - 從數組中刪除少數項目
- 30. 從數組中刪除列表項MongoDB
是「數組」所需的數據結構爲你的使用情況?似乎你使用了錯誤的錘子 – 2011-02-02 06:53:37