Java学习笔记之集合(三):ArrayList集合的原理和特点

package com.collection;

import java.util.ArrayList;

import org.junit.Test;

/*
集合的体系:
----| Collection: 单例集合的根接口
-------| List:实现了List接口的集合类,具备的特点:有序,可重复;
----------| ArrayList:
			
			笔试题:使用ArrayList无参的构造函数创建一个对象时,默认的容量是多少?如果长度不够时,每次增加多少?	
				从ArrayList的源码可以看出:
				ArrayList是底层维护了一个Object数组实现的;在JDK1.7以前,使用无参构造函数时,
				Object默认的容量是10;在1.7以后,进行了优化,初始化时,Object数组的容量为0,
				当需要添加元素的时候再给数组增加容量;如果数组长度不够使用时,会自动增长0.5倍;
	
			原理:ArrayList是在底层维护了一个Object数组实现的,所以可以添加任意类型的元素;
			特点:查询速度快,增删慢;
			特点分析:
				因为ArrayList底层是维护了一个Object数组实现的,而数组的特点是元素与元素之间的内存地址是连续的;
				那么当有多条数据的时候,假设第一个元素的内存地址是0x01,那么第二个元素的内存地址就是0x02,同理
				当需要获取第88个元素的时候,只需要把内存地址指向0x88,就可以直接获取到;所以查询速度快;
				
				根据ArrayList的源码可以看出,当向ArrayList增加元素的时候,首先要判断数组的长度是否足够,
				如果不够,就需要重新创建一个新的数组对象,新数组的容量是原数组容量的1.5倍,然后将原数组中的所有
				元素全部拷贝到新的数组中,再在新数组中添加元素;当数据量比较大的时候,这个过程会非常耗时间,所以
				说增加数据慢;
				当从ArrayList中删除元素的时候,删除掉元素的内存位置会空出来,那么后面的元素就会全部往前移动一位,
				填补删除元素的空位,以保证元素与元素之间的内存地址是连续的;当后面的元素数量比较大的时候,这个移动的
				过程也是非常耗时间的,所以说删除数据慢;
				
			什么时候使用ArrayList:
				如果对数据的操作是查询比较多,增删比较少,就可以选择用ArrayList;
				比如:学习的图书馆;
				
----------| LinkedList:
----------| Vector:

-------| Set:实现了Set接口的集合类,具备的特点:无序,不可重复;

 */

public class Demo3 {

	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Test
	public void test1(){
		ArrayList arr = new ArrayList();
		arr.add("张三");
		arr.add("李四");
		arr.add("王五");
	}
	
}

ArrayList源码分析增加元素慢的原因:









ArrayList源码分析删除元素慢的原因:







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值