2013-03-01 89 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调试将帮助您找到其容量的动态增加。