ArrayList集合的底层分析

转载 2018年04月16日 19:40:46
/*
 *ArrayList集合的底层是动态数组的数据结构,如果我们添加了一个默认的无参构造函数,
 *在添加时,数组会将默认的数组长度变为10。(若只是刚刚创建集合对象,那么这个数组的长度为0,只有在添加时才会变为10)
 *如果我们很确定的知道我们要存储元素的数量,最好在声明集合的时候传入容量值。
 *因为,我们如果只需要存储3个元素,而我们声明了一个空参的构造函数,那么集合的长度会是10,也就是说,数组有7个长度的空间被浪费了,这就是对内存的一种浪费。
 *
 *接着往下走,之后会判断数组的容量是否够用,如果够用,那么不需要扩容,反之,则进行扩容,源码中是将数组进行copy,而copyOf的底层源码,是声明了一个新的数组,
 *然后将原有的数组内容全复制进去,这样,就在不影响原有数据的基础上进行了数组扩容(扩容增长因子为1.5)。
 *我们需要保存1000个元素,而一开始默认长度是10,那么集合需要很多次扩容,每次扩容是上一次容量的1.5倍,每次扩容还要进行复制。
 *如果不事先声明一个长度的话,使用效率会大大降低,即便是不知道具体数字,也可以指定一个大概的容量。所以在声明时尽量指定长度。
 *

 */
public class ArrayListDemo {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>(4);
		for (int i = 0; i < 10; i++) {
			list.add("Hello");
		}
	}
}

【深入理解java集合系列】ArrayList实现原理

1. ArrayList概述:    ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来...
  • xiaolei1021
  • xiaolei1021
  • 2016-08-15 22:57:56
  • 1844

ArrayList底层原理以及使用技巧

ArrayList简介 ArrayList是我们在开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据。ArrayList又是线程不安全的,这在接下来代码分析的过...
  • xu404741377
  • xu404741377
  • 2017-06-29 11:26:16
  • 1679

集合各实现类的底层实现原理

ArrayList实现原理要点概括参考文献:http://zhangshixi.iteye.com/blog/674856l ArrayList是List接口的可变数组非同步实现,并允许包括null在...
  • qq_25868207
  • qq_25868207
  • 2017-02-16 16:11:04
  • 16941

第十三天:ArrayList的底层add方法原理,按自己理解重写了一下

private int size; private Object[] obj;; //1.5,1.6,ArrayList的构造器默认初始化的时候自动赋值为10 //1.7,1.8都是默认为0...
  • java_wht
  • java_wht
  • 2017-05-21 18:59:06
  • 965

各种集合类型底层实现原理&nbsp;&nbsp;泽0715…

个人官方网站 :点击进入 Set和Map的关系 Set代表无序,不能重复的集合;Map代表Key-Value组成的集合,是一种关联数组。Map的Key要求是不能重复,没有顺序。把Map的所有Key...
  • lyp0715
  • lyp0715
  • 2016-01-21 10:21:19
  • 5227

java集合的底层实现

ArrayList (1)底层采用数组实现,若使用不带参数的构造方法,则生成长度为10的Object类型数组。 (2)若个数超过10,则生成一个新数组,长度为原数组的1.5倍+1,原数组的内容复制...
  • hjw1991324
  • hjw1991324
  • 2016-08-16 22:48:11
  • 4302

集合ArrayList测试集合ArrayList测试集合ArrayList测试

  • 2010年11月12日 07:52
  • 48KB
  • 下载

ArrayList自动扩容解析

探索ArrayList     ArrayList的列表对象实质上是存储在一个引用型数组里的,有人认为该数组有“自动增长机制”可以自动改变size大小。正式地说,该数组是无法改变 大小的,实际上它只是...
  • huangfan322
  • huangfan322
  • 2016-09-27 23:26:51
  • 8699

ArrayList的底层实现原理

一、对于ArrayList需要掌握的七点内容 ArrayList的创建:即构造器往ArrayList中添加对象:即add(E)方法获取ArrayList中的单个对象:即get(int index...
  • aizhuyanwei
  • aizhuyanwei
  • 2017-11-09 20:09:34
  • 1050

HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。

HashMap相关问题 1、你用过HashMap吗?什么是HashMap?你为什么用到它? 用过,HashMap是基于哈希表的Map接口的非同步实现,它允许null键和null值,且HashMa...
  • baidu_28068985
  • baidu_28068985
  • 2017-11-14 12:23:54
  • 775
收藏助手
不良信息举报
您举报文章:ArrayList集合的底层分析
举报原因:
原因补充:

(最多只允许输入30个字)