一、ArrayList转换为数组
ArrayList提供public <T> T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就是指定数组的运行时类型。

import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
int size=list.size();
String[] array = (String[])list.toArray(new String[size]);
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}

二、数组转换为List
2.1 其实数组转换成为List的问题,Arrays对象也提供给我们public static <T> List<T> asList(T... a)供我们调用。

import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
String[] array=new String[3];
array[0]="a";
array[1]="b";
array[2]="c";
List<String> list=Arrays.asList(array);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}

这不是最好的,因为asList()返回的列表的大小是固定的。事实上,返回的列表不是java.util.ArrayList,而是定义在java.util.Arrays中一个私有静态类。我们知道ArrayList的实现本质上是一个数组,而asList()返回的列表是由原始数组支持的固定大小的列表。这种情况下,如果添加或删除列表中的元素,程序会抛出异常UnsupportedOperationException。

2.2 最好的方式是这样的:

ArrayList<Element> arrayList = new ArrayList<Element>(Arrays.asList(array));

import java.util.ArrayList;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String[] array=new String[3];
array[0]="a";
array[1]="b";
array[2]="c";
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(array));
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList.get(i));
}
}
}

首先,我们来看下ArrayList的构造方法的文档。 
ArrayList(Collection < ? extends E > c) : 构造一个包含特定容器的元素的列表,并且根据容器迭代器的顺序返回。 
所以构造方法所做的事情如下: 
1.将容器c转换为一个数组 
2.将数组拷贝到ArrayList中称为”elementData”的数组中 
ArrayList的构造方法的源码如下:

public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length; if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}

参考原文:http://www.myasker.com/archives/160.html

ArrayList深度分析:ArrayList和数组间的相互转换的更多相关文章

  1. ArrayList和数组间的相互转换

    开发中不免碰到List与数组类型之间的相互转换,举一个简单的例子: package test.test1; import java.util.ArrayList; import java.util.L ...

  2. list,set,map,数组间的相互转换

    1.list转set Set set =  new  HashSet( new  ArrayList()); 2.set转list List list =  new  ArrayList( new   ...

  3. ArrayList的分析(转)

    一. ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境 ...

  4. JDK源码分析 – ArrayList

    ArrayList类的申明 ArrayList是一个支持泛型的,底层通过数组实现的一个可以存任意类型的数据结构,源码中的定义如下: public class ArrayList<E> ex ...

  5. 【JDK】JDK源码分析-ArrayList

    概述 ArrayList 是 List 接口的一个实现类,也是 Java 中最常用的容器实现类之一,可以把它理解为「可变数组」. 我们知道,Java 中的数组初始化时需要指定长度,而且指定后不能改变. ...

  6. 透过源码分析ArrayList运作原理

    List接口的主要实现类ArrayList,是线程不安全的,执行效率高:底层基于Object[] elementData 实现,是一个动态数组,它的容量能动态增加和减少.可以通过元素下标访问对象,使用 ...

  7. [源码分析]ArrayList和LinkedList如何实现的?我看你还有机会!

    文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教. 欢迎关注我的公众号,文章每周更新. 前言 说真的,在 Jav ...

  8. 从面试角度分析ArrayList源码

    注:本系列文章中用到的jdk版本均为java8 ArrayList类图如下: ArrayList的底层是由数组实现的,数组的特点是固定大小,而ArrayList实现了动态扩容. ArrayList部分 ...

  9. java byte数组与16进制间的相互转换

      java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...

随机推荐

  1. mybatis 学习四(下) SQL语句映射文件增删改查、参数、缓存

    2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id="getStudent" paramet ...

  2. Celery-4.1 用户指南: Optimizing (优化)

    简介 默认的配置做了很多折中考虑.它不是针对某个情况优化的,但是大多数情况下都工作的非常好. 基于一个特殊的使用场景,有很多优化可以做. 优化可以应用到运行环境的不同属性,可以是任务执行的时间,使用的 ...

  3. linux uid/euid/suid

    Each UNIX process has 3 UIDs associated to it. Superuser/root is UID=0. UID Read UID. It is of the u ...

  4. RegisterUserFunc为测试对象添加新方法或重写已有方法

    QTP中为了提高扩展性,提供了一个为测试对象添加一个新的自定义方法,或者重写测试对象已有的方法的函数RegisterUserFunc,在此给大家分享一下. RegisterUserFunc:为测试对象 ...

  5. mongodb用mongoose得到的对象不能增加属性解决

    一,先定义了一个goods(商品)的models var mongoose = require('mongoose'); var Schema = mongoose.Schema; var produ ...

  6. javascript——对象的概念——Object(未完)

    http://www.blogjava.net/zkjbeyond/archive/2006/04/16/41336.html javascript中对象只包括属性和方法两种成员.ECMA-262 把 ...

  7. 01-20Asp.net--Linq语法

    Linq语法--语言集成查询 同Sqlserver语句,但顺序颠倒了. 使用方法: 新建Linq类.dbml结尾的文件 在web窗体源代码中设计表,使用Repeater中转存放: <asp:Re ...

  8. -bash : ** : command not found的问题解决(图文详解)

    问题来源 我不小心,配置错了,少了个export和PATH没配对.   source /etc/profile 之前一定要留心,否则出错让你后悔去! 问题导致现象1 问题导致现象2 解决办法 按e键, ...

  9. Android Studio 搭配 Tortoise SVN 安装问题汇总

    (1)Android studio 中想要使用SVN,但是在安装 1.9版本的SVN,会报SVN is too old(实际是太新了)的错误.所以只能下载1.8以下版本 (2)安装svn时,需要手动选 ...

  10. android tween动画和Frame动画总结

    tween  动画有四种 //透明度动画 AlphaAnimation aa = (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity. ...