Java中ArrayList的长度

时间:2014-04-28 22:17:38

标签: java arraylist

如何在Java中找到ArrayList的大小?我不是指元素的数量,而是指数的数量。

public static void main(String[] args) {
    ArrayList hash = new ArrayList(5);
    System.out.println(hash.size());
}

打印出来" 0。"使用:

    System.out.println(hash.toArray().length);

同时打印出" 0。" 我查看了http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html,但我没有看到一种方法可以帮助我。如果我没有向它添加任何内容,我的ArrayList是否会恢复为0大小?

编辑分配是使用ArrayList创建哈希表。我应该使用公式

创建一个哈希函数
    double hashkey = Math.floor(hash.size()*(Math.E*key-Math.floor(Math.E*key)));

其中key是整数。然后,hashkey成为存储值的索引。我目前使用hash.size()作为占位符,但该值应该是我的ArrayList的容量。

3 个答案:

答案 0 :(得分:3)

ArrayList.size()会显示当前大小。这就是hash.size()为您提供ArrayList哈希的当前大小的原因。它不会给你你的能力 您刚刚初始化了列表。没有在你的arraylist中添加任何元素,这就是为什么它给出了赞。

答案 1 :(得分:2)

ArrayList API中没有此类方法。 ArrayList的容量被设计隐藏。

但是,我认为你的问题是基于一种误解。

  

如何在Java中找到ArrayList的大小?我不是指元素的数量,而是指数的数量。

事实上,List的大小,List中的元素数量以及List ...的索引数(即可索引位置)都是同样的事情。

ArrayList的容量有所不同。它是可以包含的元素数,而不重新分配列表的后备数组。但是,列表具有容量N这一事实并不意味着您可以索引N - 1。实际上,无论容量如何,您最多只能索引size() - 1


现在处理你的例子:

ArrayList list = new ArrayList(5);
System.out.println(list.size());

这打印出零,因为列表中没有元素。 ArrayList()ArrayList(int)构造函数都创建并返回空列表。该列表当前有5个元素的空间(因为你给它的初始容量为5),但你不能索引这些插槽。

System.out.println(list.toArray().length);

这会打印零,因为当您将列表的内容复制到数组(使用toArray())时,该数组的大小与列表相同。根据定义。

这并不意味着列表的后备阵列已经改变。相反,它仍然足以容纳5个元素而无需重新分配......就像之前一样。

但是......我听到你说......数组的长度为零!

是的,但那不是支持数组! toArray()方法分配 new 数组并将List内容复制到该数组中。它不会返回实际的后备数组。

答案 2 :(得分:1)

也许您应该将ArrayList封装在一个类中,并在该类中添加另一个属性private int capacity

public class AdvancedArrayList<T>
{
  private int capacity;
  private ArrayList<T> list;
  public AdvancedArrayList<T>(int capacity)
  {
    this.capacity = capacity;
    list = new ArrayList<>();
  }
  public ArrayList<T> getList()
  {
    return list;
  }
  public int getCapacity()
  {
    return capacity;
  }
  public void addElement(T element)
  {
     if(list.size() < capacity)
        list.add(element);
     else
        System.out.println("Capacity is full");
  }
}

请注意,尺寸容量不同。