写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
下文主要对java.util.ArrayList<E>中的其他操作和数组操作进行介绍,主要内容包括:

1、其他操作

2、数组操作

参考内容:

1、JDK源码(1.7)

-------------------------------------------------------------------- 

1、ArrayList的其他操作和数组操作                                               

其他操作和数组操作

(1)Object clone()  , 关于java中的深拷贝和浅拷贝可以看看这里的介绍

功能: 返回此列表实例的浅复制

示例代码:

 import java.util.ArrayList;

 public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(22);
list.add(33);
list.add(44);
list.add(11);
list.add(15);
list.add(12);
list.add(7);
list.add(3);
System.out.println("list1 :" + list);
//测试ArrayList的'Object clone()'方法的使用
ArrayList<Integer> list2 = (ArrayList<Integer>) list.clone();
System.out.println("list2 :" + list2);
System.out.println("-----------------");
list2.set(1, 3333);
System.out.println("list1 :" + list);
System.out.println("list2 :" + list2);
}
} 运行结果:
list1 :[22, 33, 44, 11, 15, 12, 7, 3]
list2 :[22, 33, 44, 11, 15, 12, 7, 3]
-----------------
list1 :[22, 33, 44, 11, 15, 12, 7, 3]
list2 :[22, 3333, 44, 11, 15, 12, 7, 3]

源代码如下:

     public Object clone() {
try {
@SuppressWarnings("unchecked")
//进行浅拷贝
ArrayList<E> v = (ArrayList<E>) super.clone();
//为拷贝的新对象设置属性值
v.elementData = Arrays.copyOf(elementData, size);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}

(2) void ensureCapaCity(int minCapacity)

功能:如有必要,增加此列表实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数

源代码如下:

    /*
确保列表容量足够
*/
public void ensureCapacity(int minCapacity) {
//如果参数minCapacity>0,则调用内部方法ensureCapacityInternal
if (minCapacity > 0)
ensureCapacityInternal(minCapacity);
} /*
内部私有方法,确保列表容量足够
*/
private void ensureCapacityInternal(int minCapacity) {
//fast-fail机制标识加1
modCount++;
// overflow-conscious code
//参数minCapacity比当前列表容量大,则调用私有方法grow
if (minCapacity - elementData.length > 0)
grow(minCapacity);
} /*
内部私有方法,
*/
private void grow(int minCapacity) {
// overflow-conscious code
//记录当前列表容量大小
int oldCapacity = elementData.length;
//计划扩容大小为原列表容量大小的1.5倍
int newCapacity = oldCapacity + (oldCapacity >> 1);
//如果计划扩容的值 比 参数minCapacity小,则用minCapacity的值作为扩展的大小
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity; //检查扩容的容量是否大于 列表允许的最大容量
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
//调用java.util.Arrays的copyOf方法对原数组elementData进行复制,复制的长度为newCapacity
elementData = Arrays.copyOf(elementData, newCapacity);
} private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}

(3)void trimToSize()

功能:将此列表的容量调整为列表的当前元素个数

源代码如下:

 public void trimToSize() {
//fast-fail机制标识加1
modCount++;
//记录原列表容量大小
int oldCapacity = elementData.length;
//如果列表中元素个数 小于 列表容量带下,则对列表容量进行缩小
if (size < oldCapacity) {
elementData = Arrays.copyOf(elementData, size);
}
}

(4)Object[] toArray()

功能:按适当顺序返回包含此列表中所有元素的数组

源代码如下:

     public Object[] toArray() {
return Arrays.copyOf(elementData, size);
}

(5)<T> T[] toArray(T[] a)

功能:按适当顺序返回包含此列表中所有元素的数组

源代码如下:

     @SuppressWarnings("unchecked")
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}

-------------------------------------------------------------------------------------------------------------

java.util.ArrayList系列文章

java.util.ArrayList<E>(1)  java.util.ArrayList<E>(2)  java.util.ArrayList<E>(3)

java.util.ArrayList<E>(4)  java.util.ArrayList<E>(5)  java.util.ArrayList<E>(6)

相关知识                                                                                              

java.util.Collection<E>   java.util.AbstractCollection<E>   java.util.List<E>

java.util.AbstractList<E>   java.util.Iterator<E>   java.util.ListIterator<E>

Java中的标记接口   迭代器模式   Java中的深拷贝和浅拷贝  java.util.Arrays

内功心法 -- java.util.ArrayList<E> (6)的更多相关文章

  1. 内功心法 -- java.util.ArrayList<E> (1)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  2. 内功心法 -- java.util.ArrayList<E> (2)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  3. 内功心法 -- java.util.ArrayList<E> (3)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  4. 内功心法 -- java.util.ArrayList<E> (4)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  5. 内功心法 -- java.util.ArrayList<E> (5)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  6. 解决springmvc报No converter found for return value of type: class java.util.ArrayList问题

    一.背景 最近闲来无事,想自己搭建一套Spring+SpringMVC+Mybatis+Mysql的环境(搭建步骤会在以后博客中给出),结果运行程序时,适用@ResponseBody注解进行返回Lis ...

  7. Java.util.ArrayList详解

    java.util.ArrayList就是传说中的动态数组. 继承了关系,有此可看出ArrayList与list的collection的关系 public class ArrayList<E&g ...

  8. java@ 利用ArrayList实现dijkstra算法以及topological 排序算法(java.util.ArrayList)

    package dataStructure; import java.util.ArrayList; import java.util.LinkedList; import java.util.Que ...

  9. java.util.ArrayList、java.util.vector和java.util.LinkedList (JDK 1.8.0_111)

    一.java.util.ArrayList 1.1 ArrayList 继承结构 ArrayList实现了RandomAccess,可以随机访问(其实就是通过数组下标访问):实现了Cloneable, ...

随机推荐

  1. Cocos2dx 学习笔记整理----在项目中使用图片(三)

    这节练习下DragonBones. 手机由于性能所限,需要特注意资源的使用. 游戏项目的话由于资源比较多,一般都会用到DragonBones来做动作,这个又称为龙骨. DragonBones传送点:h ...

  2. (简单) POJ 1562 Oil Deposits,BFS。

    Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...

  3. 自己实现的sax XML解析,可能会有误

    package com.agatha.bean; public class OrderInfoBean { private String order_id; private String room_t ...

  4. Extjs4中的store

      Extjs 4引入新的数据包,其中新增了不少新类并对旧有的类作出了修整.使数据包更强大和更容易使用.  本章我们将学习一下内容: 2.1. 概述新特性      Extjs4的数据包引入了如Mod ...

  5. FZU 2112 Tickets

    这个问题可以转变一下,先要知道有几个连通块,连通块之间肯定需要添加一条边, 还需要知道每个连通块内部需要添加几条边,这个问题等价于求一张图至少需要几笔画成,这个问题的答案是度为奇数的点的个数/2 #i ...

  6. Java Dwr3实现消息推送步骤详解

    DWR包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改 ...

  7. JQuery的 jQuery.fn.extend() 和jQuery.extend();

    原文链接:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.html jQuery.fn.extend(); jQuery.extend ...

  8. RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  9. 数据结构-String、char

    String 常用方法: 获取长度:int length = strl.length() 获取第i个字符:char iChar =  str.charAt(i) String转成字符数组:char[] ...

  10. Repeater绑定事件ItemDataBound中获取数据库中数据

    protected void rp1_ItemDataBound(object sender, RepeaterItemEventArgs e)        { if (e.Item.ItemTyp ...