伊莉討論區

標題: 問一下ArrayList<Integer> arr = new ArrayList<Integer>(4); (4)何意義 [打印本頁]

作者: 復仇刺    時間: 2021-1-23 09:44 PM     標題: 問一下ArrayList<Integer> arr = new ArrayList<Integer>(4); (4)何意義

// Java code to demonstrate the error of
// get() method in ArrayList
  
// for ArrayList functions
import java.util.ArrayList;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // creating an Empty Integer ArrayList
        ArrayList<Integer> arr = new ArrayList<Integer>(4);//(4)代表什麼意思啊= =" 為什我把4刪掉編譯還是過

  
        // using add() to initialize values
        // [10, 20, 30, 40]
        arr.add(10);
        arr.add(20);
        arr.add(30);
        arr.add(40);
  
        // element at index 2
        int element = arr.get(5);
  
        System.out.println("the element at index 2 is " + element);
    }
}



作者: tryit244178    時間: 2021-1-24 12:09 PM

指定的初始容量。容量是用於存儲元素的底層數組的大小。
請參考:http://tw.gitbook.net/java/java_arraylist_class.html
作者: 復仇刺    時間: 2021-1-24 01:30 PM

tryit244178 發表於 2021-1-24 12:09 PM
指定的初始容量。容量是用於存儲元素的底層數組的大小。
請參考:http://tw.gitbook.net/java/java_arrayli ...

先感謝師傅回應。
指定的初始容量。那麼是代表四個容量的意思對嗎@@?(跟陣列宣告意思相同)因為我看的是網路的範例拷貝過來這裡問的= ="然後像這串ArrayList<Integer> values = new ArrayList<>() 就沒有寫,沒有寫是代表直接動態配置容量嗎
作者: 復仇刺    時間: 2021-1-24 10:27 PM

復仇刺 發表於 2021-1-24 01:30 PM
先感謝師傅回應。
指定的初始容量。那麼是代表四個容量的意思對嗎@@?(跟陣列宣告意思相同)因為我看的是網 ...

恩.....抱歉我沒注意到我程式碼已經被我修改=="原始碼在下方=.="get(5)是在當時測東西修改忘了修改回來= ="...結果測試就炸了==


// Java code to demonstrate the working of
// get() method in ArrayList
  
// for ArrayList functions
import java.util.ArrayList;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // creating an Empty Integer ArrayList
        ArrayList<Integer> arr = new ArrayList<Integer>(4);
  
        // using add() to initialize values
        // [10, 20, 30, 40]
        arr.add(10);
        arr.add(20);
        arr.add(30);
        arr.add(40);
  
        System.out.println("List: " + arr);
        // element at index 2
        int element = arr.get(2);
  
        System.out.println("the element at index 2 is " + element);
    }
}


作者: kwj    時間: 2021-3-26 12:15 AM

本帖最後由 kwj 於 2021-3-26 12:22 AM 編輯
  1. ArrayList<Integer> values = new ArrayList<>();
複製代碼
沒有宣告初始大小的話,預設是會建出長度為 10 的 ArrayList,也就是說相當於呼叫了 new ArrayList<>(10)。

指定初始大小最主要的原因是在於要避免發生 ArrayList 空間不夠用的問題。因為 ArrayList 會在空間不夠時自動擴展,但它擴展的方法效率很差(主要是在於要把所有資料搬去新的 array),所以如果可以預測需要的大小時,盡量事先指定大小,整體程式的執行效率會比較好。

除此之外,更確切地說,其實 new ArrayList<>() 在一開始是會產生一個長度為 0 的陣列,然後真正上面所說的「預設會建出長度為 10 的 ArrayList」是在第一次對這個 ArrayList 呼叫 add() 的時候。換言之,這個設計是為了 lazy initialize,只有在你實際地使用到這個 ArrayList 時,它才會幫你向系統索取資源。




歡迎光臨 伊莉討論區 (http://www5.wahas.com/) Powered by Discuz!