写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
下文主要对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. shell之crontab

    一  crontab高级用法 Crontab 主要是在做排程, 通常一般寫法大概都是如下: 0 0 * * * /usr/local/www/awstats/cgi-bin/awstats.sh 這種 ...

  2. HUST 1353 Dartboard

    构造.应该有多种构造方法.做的时候WA了好几发,怀疑做法是错的,事实上是代码写搓了.. 我是这样构造的:先从上往下左右放奇数,再从下往上左右填偶数 (一)如果n/2是偶数(以12为例) 左边列是内环, ...

  3. object - c 在URL中截取特定参数的值

    #pragma mark - 获取url特定的参数 -(NSString *) jiexi:(NSString *)CS webaddress:(NSString *)webaddress { NSE ...

  4. iOS开发——自定义进度圆环

    1.在DrawCircle.h文件中 提供了接口,在使用的时候,可以设定圆心.半径.角度.圆环的宽度.圆环的背景底色.圆环的进度条颜色,当然后面三个有自定义的值. // //  DrawCircle. ...

  5. Spring学习---JPA配置和使用

      理论的东西如果不实践,永远不会变成自己的东西.本文将介绍用maven管理,用Hibernate作为JPA供应商,使用MYSQL数据库,配置和使用JPA.   以下代码已经上传至GITHUB.   ...

  6. LPC1768的usb使用--硬件篇

    LPC1768芯片带有USB设备控制器,前面写的文章都是在说比较简单的设备驱动,今天来说复杂一点的 首先是硬件层的配置 #ifndef __USBHW_H__ #define __USBHW_H__ ...

  7. tornado 增加日志模块

    log类 #!/usr/bin/env python # -*- coding:utf-8 -*- import logging.handlers class Logger(logging.Logge ...

  8. pcommlite串口通讯库使用

    MFC下串口编程使用最多的两种方法是读取注册表和使用mscomm组件,都有着或多或少的缺陷,调用系统SDK比较麻烦,而MSCOMm组件最多支持16个串口,串口号大于16的时候无法打开,遇到这种情况,可 ...

  9. Intent的概念及应用(一)

    ------siwuxie095 1.显式Intent (1)先创建一个项目:LearnIntent,选择API:21 Android 5.0, 选择Empty Activity,完成 (2)创建一个 ...

  10. css清除浮动float的三种方法总结

    原文地址: http://my.oschina.net/leipeng/blog/221125 张大神的解析: http://www.zhangxinxu.com/wordpress/2010/01/ ...