JAVA 中ArrayList的问题

List<Fruit>fruit=newArrayList<Fruit>(9);这句话的意思是我定义了一个初始长度为9的fruit那为什么我没做任何操作就可以往里面加第1... List<Fruit> fruit=new ArrayList<Fruit>(9);
这句话的意思是我定义了一个初始长度为9的 fruit
那为什么我没做任何操作就可以往里面加第10个元素呢?
如果是随意可以变长的 那还可以设置初始长度有什么意义?
展开
 我来答
许你万丈光芒好7886
2008-10-07 · TA获得超过174个赞
知道答主
回答量:60
采纳率:0%
帮助的人:91.3万
展开全部
ArrayList的是在超过长度后自动扩展自己长度的一半,也就是说在你添第10个元素的时候,他会扩展5,再超过扩展7或8...

ArrayList没这个功能你用他干嘛,用数组不就完了?

初始长度还是有意义的,比如你要添加100万条?你等他慢慢给你扩展?
另外,ArrayList相比其他的List的好处是,随机访问速度快,但中间随机插入慢...
百度网友3b46a7f
2008-10-07 · TA获得超过2520个赞
知道小有建树答主
回答量:735
采纳率:0%
帮助的人:0
展开全部
源码:
//声明数组
private transient Object[] elementData;

//通过构造函数初始化数组容量
public ArrayList(int initialCapacity) {
。。。
this.elementData = new Object[initialCapacity];
}

//添加元素的时候首先确定数组容量
public boolean add(E e) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}

//确定容量代码
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}

注意: Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;由此可见当数组长度超过声明长度,数组要扩容的时候是以我们声明的数组长度为基准的,新数组的长度会是旧数组长度的2/3! 按照这个道理,如果你想每次数组扩容的时候增加的多一些,就要设置较大的原始容量,反之亦然!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ray7hu
2008-10-07 · TA获得超过287个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:139万
展开全部
ArrayList的特点就是容量不受限制(好像~默认情况可以增大原来的50%。),它会根据元素的个数自动增长,不用你来操作。
设置初始长度可以避免不必要的资源开销。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
火烧地球
2008-10-07 · TA获得超过131个赞
知道答主
回答量:72
采纳率:0%
帮助的人:0
展开全部
一楼的回答基本正确,我做以下补充:
arrallist本身是以数组结构对数据进行保存的,并且提供用户进行按照序列的索引操作,也就是说他的数据查找定位比较好,时间复杂度为O(1),但是正是因为以数组保存所以他的添加比较慢,因为这个涉及到内存中数据的移动问题,在容量方面,采用了动态的设计,ArrayList提供了可以动态修改数组大小的方法,也就是你可以自己定义当arraylist满了的时候自动增加多少内存容量。默认好像是增加一半。。你只有对arraylist的内部结构有了比较清晰的认识才会对他的各种看似不平常的变化有一个更好的理解。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式