2

在 Java 中创建整数类型的数组列表时,默认值是什么?我需要检查一个数组列表是否已满,我要获取数组的大小,然后在最后一个索引处获取值并检查它是否是默认值。

有没有更好的办法?默认值是多少?

希望这是有道理的。干杯

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;
    }
}

我现在有这个,它看起来怎么样?现在这有意义吗?

4

8 回答 8

4

当您声明一个 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 个元素,除非你像我上面那样限制它。

于 2013-03-01T16:51:01.333 回答
3

如果您实际上没有将Integers 添加到 ArrayList,那么get()列表中的任何一个都将返回一个IndexOutOfBoundsException.

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

于 2013-03-01T16:48:03.367 回答
2

当您创建一个 ArrayList 时,在 ArrayList 类中,有一个元素数组。这些元素设置为 null,因为它们不引用 Integer 对象的任何实例。请记住,这与 int 不同。

此外,一个 ArrayList 没有填满。它是动态的,并且会在需要时增加大小。

编辑:响应您关于设置最大大小的编辑,如果您想要一个最大大小,那么我不确定您为什么想要一个数组列表。但是如果你想坚持使用 ArrayList 类,我会创建自己的类,它是 arraylist 的子类,并通过检查覆盖 add 方法以确保 size() 的值不超过固定数量。

于 2013-03-01T16:46:57.873 回答
2

默认情况下,ArrayList 容量为 10。默认情况下,它们都为 null,直到您将元素添加到其中。但是调用 size() 会给你添加的元素数量。它不会给出 10 作为结果(不考虑默认的空值)。这里的扭曲是,如果您将空值添加到列表中,那么它们会在计算 size() 时包含在内。例如,如果您将 3 个有效整数和 2 个空值添加到列表中,则 size() 将返回 5。Eclipse 调试将帮助您发现其容量的动态增加。

于 2013-05-28T13:14:40.743 回答
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
}

您只需要决定当尝试添加超出限制允许的更多元素时列表应该做什么。要么忽略元素,要么抛出异常。

于 2013-03-01T17:11:44.143 回答
1

没有像“满”这样的东西ArrayList。该size()方法将返回它当前拥有的元素数量。

于 2013-03-01T16:46:19.260 回答
0

ArrayLists 没有默认值。如果您initialCapacity在初始化时为 ArrayList 提供 a,那么您只是在提示底层数组的大小 - 但您实际上无法访问 ArrayList 中的值,直到您自己添加项目。

于 2013-03-01T16:48:40.007 回答
0

任何 List 实现都有一个可以使用的isEmpty()方法。

于 2013-03-01T16:49:17.827 回答