查看完整版本: 問一下ArrayList<Integer> arr = new ArrayList<Integer>(4); (4)何意義
頁: [1]

復仇刺 發表於 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
        //
        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);
    }
}


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

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 static/image/common/back.gif
指定的初始容量。容量是用於存儲元素的底層數組的大小。
請參考:http://tw.gitbook.net/java/java_arrayli ...

先感謝師傅回應。
指定的初始容量。那麼是代表四個容量的意思對嗎@@?(跟陣列宣告意思相同)因為我看的是網路的範例拷貝過來這裡問的= ="然後像這串ArrayList<Integer> values = new ArrayList<>() 就沒有寫,沒有寫是代表直接動態配置容量嗎...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

復仇刺 發表於 2021-1-24 10:27 PM

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

恩.....抱歉我沒注意到我程式碼已經被我修改=="原始碼在下方=.="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
        //
        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);
    }
}

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

kwj 發表於 2021-3-26 12:15 AM

本帖最後由 kwj 於 2021-3-26 12:22 AM 編輯

ArrayList<Integer> values = new ArrayList<>();沒有宣告初始大小的話,預設是會建出長度為 10 的 ArrayList,也就是說相當於呼叫了 new ArrayList<>(10)。

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

除此之外,更確切地說,其實 new ArrayList<>() 在一開始是會產生一個長度為 0 的陣列,然後真正上面所說的「預設會建出長度為 10 的 ArrayList」是在第一次對這個 ArrayList 呼叫 add() 的時候。換言之,這個設計是為了 lazy initialize,只有在你實際地使用到這個 ArrayList 時,它才會幫你向系統索取資源。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>
頁: [1]