好贷网好贷款

ArrayList分析

发布时间:2016-12-3 17:41:55 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"ArrayList分析",主要涉及到ArrayList分析方面的内容,对于ArrayList分析感兴趣的同学可以参考一下。

  ①创建ArrayList()      默认通过调用其构造方法ArrayList(int i)来完成ArrayLIst的创建,如:     ArrayList list = new ArrayList(12);     这时候在其构造方法内部其实是创建了一个大小为12的Object的数组。    当没有传入数组容量值得时候 默认会创建一个为10的Object数组。因此ArrayList的实现是基于数组的方式来实现元素的存储。  ②插入对象:add(E)    由于ArrayList是基于数组实现的,那么当调用add()方法的时候,其实质就是向数组内添加新的元素。接下来看看其怎么实现动态改变ArrayList大小的原理吧。    当调用ArrayList的add()方法的时候 ,首先会ArrayList中已有的元素的数量增加1,产生一个最小容量值 minCapacity的变量,然后会将此值与ArrayList内部数组   的大小进行比较,如果此值小于数组的大小 ,那么会将次对象直接插入到数组的末尾处(自己猜测),如果此minCapacity的值大于数组的值 ,那么说明该数组有可能已经不能   容纳更多的元素了,那么这时候ArrayList会怎么做呢?它会将原来的数组赋值给一个新的数组对象,但是这个新的数组数组对象的元素的个数的确定是怎么实现的   呢 ?计算方法为 :会将原来的数组的大小*1.5+1,如果此值仍然小于之前的minCapacity的值,那么就会以minCapacity的值作为新的数组对象的大小,最后通过  调用Arrays.copyOf()来生成新的数组对象。  ArrayList还提供add(int,E)方法 。允许你添加特定为的元素对象,但是前提这个位置是存在的,数组的容量是够用的,实现方式上,会将index和其之后的元素向后挪动以为,让出原来的index的位置 来插入新的元素,可见这种方式是多付出一次数组的复制的。   ③删除对象 remove(E)    当执行此方法的时候,会检查要删除的对象是否为null,如果为null会遍历数组中已有的值,比较里面的值是否为null 如果为null会删除相应位置的对象,接着会将删除对象位置之后的对象向前复制以为,并将数组最后一个元素的值设置为null来释放对此对象的引用,如果里面的值不为null的话,会调用对象的equals方法比较对象是否相同 (也是要遍历整个数组的),如果相同会删除这个位置的对象,剩下的操作和为null的操作一样。  另外ArrayList还提供了romove(int index)方法来删除制定为的对象 ,首先会检查其是否会数组越界 ,但是不会遍历整个数组,因此性能会比较好。  ④获取对象get(int index)   传入的值就是对象在数组中的位置 ,但是前提会检查数组是否越界 ,如果没有,那么就会返回数组中位于此位置的对象。  ⑤ 遍历对象iterator()   iterator是有ArrayList的父类AbstractList实现,当每次调用iterator()方法时,都会创建一个新的Itr实例,当调用此实例的hasNext()时,会比较当前数组的位置和数组中已经元素  的个数是否相等,如果相等说明到达末尾 ,返回false ,否则返回true。  当调用next方法时候则会调用get(int)  来获得相应的对象。 ⑥判断是否包含某个对象contains(E)  这个操作会遍历整个数组中已有的对象,如果E为null,则直接判断数组中是否有null 如果有就返回true,否则返回false。如果E不为null,会调用equals方法来比较是否相等,  相等返回true 否则返回false。  indexOf和lastIndexOf是获取对象所在的位置,其中前者是从前往后寻找,后者正好相反。 总结:  ArrayList是基于数组实现的,没有容量的限制。 再删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量。 ArrayList是非线程安全的。

上一篇:Linux下安装与配置tomcat集群+负载均衡
下一篇:mapreduce实例-Join连接 (reduce Side Join)

相关文章

关键词: ArrayList分析

相关评论