2013-03-01 113 views
0

當您在Java中創建Integer類型的數組列表時,默認值是什麼?我需要檢查一個數組列表是否已滿,然後我將獲取數組的大小,然後獲取最後一個索引處的值,並檢查它是否爲默認值。Java - ArrayList默認初始值

有沒有更好的方法?默認值是多少?

希望是有道理的。歡呼聲

int size = a.size(); 
int last = a.get(size); 
if(last == null) 
{ 
    return true; 
}else{ 
    return false; 
} 

編輯;

是否有可能創建一個最大大小的ArrayList,你不能去阻止它動態擴展? 當你創建一個ArrayList並且你使用size()會返回數組的實際大小或元素的數量嗎? 當這樣做創建一個最大大小將默認值爲空?

public boolean isFull() 
{ 
    int size = a.size(); 
    int last = 0; 
    try{ 
     last = a.get(size-1); 
    }catch (Exception e){ 
    } 
    if(last == null) 
    { 
     return true; 
    }else{ 
     return false; 
    } 
} 

我目前有這個,它看起來怎麼樣?這現在有道理嗎?

+1

你正在處理一個數組,java.util.ArrayList'還是其他的東西? – 2013-03-01 16:47:04

+1

ArrayList永遠不會「滿」。並且沒有默認值,默認值是列表「空」。你的問題沒有意義。 – Durandal 2013-03-01 16:47:39

+0

AaronKurtzhals是util列表。 @Durandal,對啊。我忘記了這一點。 Array是否是這個的正確實現? – Kyle93 2013-03-01 16:49:40

回答

5

當你聲明一個ArrayList時它是空的。它也是一個動態容器,意味着它將會增長,因此您可以詢問它是否「完整」更多是您需要添加到代碼中的約束。

所以,如果你想達到你描述的目標。

List<Integer> list = new ArrayList<Integer>(); 
int MAX_ELEMENTS = 5; //Set this to however you want to constrain the datatype 

public boolean addElement(Integer value) { 
    if (list.size() < MAX_ELEMENTS) { 
    list.add(value); 
    return true; 
    } else { 
    return false; 
    } 
} 

public boolean isFull() { 
    return (list.size() == MAX_ELEMENTS); 
} 

public Integer getLast() { 
    if (!list.isEmpty()) 
    return list.get(list.size()-1); 
    else 
    return null; 
} 

正如其他人雖然說,如果你生成一個列表與預設的尺寸,例如:

List<Integer> list = new ArrayList<Integer>(10); 

你必須10個元素大,值全部爲null的列表。如果添加其他元素,則列表中的元素的長度仍會比10個元素大,除非像上面那樣限制它。

+0

被選爲最佳答案,因爲它允許我回答我最初的想法。 – Kyle93 2013-03-01 18:20:52

1

有沒有像「全」ArrayList這樣的事情。 size()方法將返回它當前擁有的元素的數量。

+0

我們真的認爲它是'null'嗎?我會說沒有默認,因爲沒有對象。 – 2013-03-01 16:47:12

+0

如果我要創建一個初始大小爲10的ArrayList,那麼向它添加3個值。大小仍然是10不是3是正確的? – Kyle93 2013-03-01 16:53:11

+0

不,大小將爲3.當您執行新的ArrayList時(10); 10是初始容量,而不是初始大小。 – 2013-03-01 16:56:12

2

當您在ArrayList類中創建ArrayList時,會有一個元素數組。那些元素被設置爲null,因爲它們不引用Integer對象的任何實例。不要忘記,這不是一個整數。

此外,ArrayList沒有滿。它是動態的,並且在需要時會增加尺寸。

編輯:爲了響應您關於設置最大尺寸的編輯,如果您想要最大尺寸,那麼我不確定您爲什麼需要陣列列表。但是如果你想堅持一個ArrayList類,我會創建自己的類,它是arraylist的子類,並用一個檢查來覆蓋add方法,以確保size()的值不超過固定數量。

+0

size()是內容的邏輯指示符,無論實現如何。如果它是'0',則表示「沒有」。你談論的那些元素是不可訪問的,所以不存在。 – UmNyobe 2013-03-01 16:49:56

+0

是的。我沒有說size()的值會增加。我說陣列本身的尺寸會增加,它會。 – christopher 2013-03-01 16:51:17

3

如果您實際上沒有將Integer添加到ArrayList中,則列表中的任何get()將返回IndexOutOfBoundsException

size()方法返回列表中元素的數量(即添加了多少個元素),而不是當前的容量。

+0

謝謝,我忘了考慮這一點。我將在我的實施中包括這一點! – Kyle93 2013-03-01 16:54:19

0

ArrayLists沒有默認值。如果您在初始化時給ArrayList一個initialCapacity,那麼您只是提供了底層數組大小的提示 - 但在您自己添加項目之前,您實際上無法訪問ArrayList中的值。

0

任何列表實現都有一個您可以使用的isEmpty()方法。

1

你想簡單地將列表約束到一個給定的大小,或者你想檢查它是否大於給定的大小?

檢查清單大於:

if (list.size() > limit) 
    System.out.println("List too large"); 

它不可能約束一個ArrayList的大小 - 你可以但創建自己的ArrayList的子類,做到了這一點:

public class LimitedList<E> extends ArrayList<E> { 

    private int limit; 

    public LimitedList(int limit) { 
     this.limit = limit; 
    } 

    public boolean add(E e) { 
     // only add if the limit is not exceeded 
     if (size() < limit) 
      super.add(e); 
    } 

    // overwriting the addAll()-methods is left as an excercise to the reader 
} 

您只需要決定在嘗試添加超出限制允許的元素時列表應該執行的操作。要麼只是忽略元素或拋出一個異常。

1

默認情況下,ArrayList容量爲10.默認情況下,它們都爲空,直到您將元素添加到它爲止。但調用size()會給你添加的元素數量。它不會給出10作爲結果(默認空值不會被考慮)。這裏的扭曲是如果你將空值添加到列表中,那麼在計算size()時會包含它們。例如,如果向列表中添加3個有效整數和2個空值,則size()將返回5. Eclipse調試將幫助您找到其容量的動態增加。