介紹
數組是Java中最基礎的數據結構之一,常用於存儲一組有序的元素。當數組中的元素個數超過數組容量時,就需要對數組進行擴容,以容納更多的元素。本文將介紹Java數組擴容的實現方式及其優化。
普通的數組擴容實現
Java中的數組長度是不可變的,因此當需要添加更多元素時,就需要創建一個更大的數組,將原數組中所有元素拷貝至新數組中,最後再將新元素添加到新數組中。這是最常見也是最簡單的數組擴容實現方式。
public static int[] expandArray(int[] originalArray){
int[] expandedArray = new int[originalArray.length * 2];
System.arraycopy(originalArray, 0, expandedArray, 0, originalArray.length);
return expandedArray;
}
上述代碼將原數組擴容為原數組長度的兩倍,使用了System類中的arraycopy()方法來實現數組的拷貝。這個方法能夠非常高效地將原數組的元素拷貝至新數組中,避免了手動循環拷貝可能帶來的性能損失。
合理設置數組擴容時的增量
雖然上述代碼能夠正確地實現了數組擴容,但是如果總是將數組長度翻倍來進行擴容,就會造成大量浪費。因此就需要在擴容時合理地設置數組的增量。
通常情況下,可以將增量設置為原始數組的一半長度。這樣做的好處在於,隨着數組長度的增加,每次擴容所增加的額外空間將會越來越少,從而降低內存的消耗。
public static int[] expandArray(int[] originalArray){
int[] expandedArray = new int[originalArray.length + originalArray.length / 2];
System.arraycopy(originalArray, 0, expandedArray, 0, originalArray.length);
return expandedArray;
}
上述代碼實現了數組擴容時增量設置的優化方法,將擴容增量從之前的數組長度翻倍變為數組長度的一半。這樣所擴容的空間相對較小,可以節約內存。
使用ArrayList替代數組
Java中的ArrayList類繼承自AbstractList類,實現了List接口,是一種可變大小的數組的實現方式。在插入和刪除元素時,ArrayList會自動對數組進行擴容、收縮,避免了人工擴容帶來的麻煩,也提高了代碼的易讀性和可維護性。
ArrayList arrayList = new ArrayList();
arrayList.add(1); //自動擴容
arrayList.add(2);
arrayList.remove(0); //自動收縮
上述代碼使用ArrayList類,成功地實現了元素的添加和刪除。在添加元素時,如果數組容量已滿,ArrayList會自動將其容量擴大至原來的一倍;在刪除元素時,如果空餘空間過多,ArrayList會自動將其容量縮小至大小合理的程度。
總結
本文介紹了Java數組擴容的三種方式,包括普通的數組擴容實現、合理設置數組擴容時的增量以及使用ArrayList替代數組。這些方法都有各自的優點和缺點,需要在實際應用時加以權衡。在進行數組擴容時,一定要注意選擇合適的方式,避免造成過多的內存浪費,提高代碼的性能和可讀性。
原創文章,作者:GJLI,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144765.html