【问题标题】:Java - ArrayList default initial valuesJava - ArrayList 默认初始值
【发布时间】:2013-03-01 16:44:36
【问题描述】:

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

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

【问题讨论】:

  • 您使用的是数组、java.util.ArrayList 还是其他东西?
  • ArrayList 永远不会“满”。并且也没有默认值,默认是列表为“空”。你的问题没有意义。
  • AaronKurtzhals 是的 util 数组列表。 @Durandal,没错。我忘记了那件事。 Array 会是正确的实现吗?
  • @Kyle93 重新表述您的问题以明确您想要解决什么问题。您的示例代码段也没有任何意义,它不可避免地会在第二行抛出 IndexOutOfBoundsException。
  • @Durandal 我已经这样做了,我希望这是有道理的。

标签: java arraylist integer default


【解决方案1】:

当你声明一个 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 个元素,除非您像我上面所做的那样对其进行限制。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • size() 是内容的逻辑指示符,无论实现如何。如果是0,则“无”。你所说的那些元素是不可访问的,所以不存在。
        • 是的。我没有说 size() 的值会增加。我说过数组本身的大小会增加,它会增加。
        【解决方案5】:

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

        【讨论】:

        • 我们真的认为它是null吗?我会说没有默认值,因为没有对象。
        • 如果我要创建一个初始大小为 10 的 ArrayList,然后向其添加 3 个值。大小仍然是 10 而不是 3 正确吗?
        • 不,大小将是 3。当你做 new ArrayList(10); 10 是初始容量,而不是初始大小。
        • @Dan 啊谢谢!我的错!我将再看看 ArrayLists 及其适用的方法以及它们是如何工作的
        【解决方案6】:

        您是想简单地将列表限制为给定大小,还是要检查它是否大于给定大小?

        检查列表是否大于:

        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
        }
        

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              猜你喜欢
              • 2013-10-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-02-22
              • 2013-01-17
              • 2014-12-29
              相关资源
              最近更新 更多