如何在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的容量。
答案 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");
}
}
请注意,尺寸与容量不同。