1.数组转换成集合

数组转换为集合,用Arrays.asList方法。

public static void main(String[] args) {
String[] arr = {"a","b","c","d","e"};
List<String> list = Arrays.asList(arr);
System.out.println(list); // List的toString方法
} // 输出结果:
[a, b, c, d, e]

如果给转换过来的集合添加一个元素呢?

public static void main(String[] args) {
String[] arr = {"a","b","c","d","e"};
List<String> list = Arrays.asList(arr);
list.add("f");
System.out.println(list);
} // 输出结果:
Exception in thread "main" java.lang.UnsupportedOperationException

报错了~

其实,由数组转换过来的集合,并不能添加或删除元素,但是可以用集合的其他方法,因为集合比数组的方法丰富很多。

再试一个基本数据类型的数组:

public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
List list = Arrays.asList(arr);
System.out.println(list);
} //输出结果:
[[I@74a14482]

奇怪了,怎么不是[1,2,3,4,5]?而是内存地址?

原因是因为,基本数据类型的数组转换为集合时,会将整个数组当作一个对象来转换的!

如果加上泛型就很容易知道错误了。

List<int> list = Arrays.asList(arr);   // 编译的时候就报错了。
List<int[]> list = Arrays.asList(arr);   // 这样就没有报错,可以知道集合里面的是数组对象,数组没有重写toString方法,自然的,打印数组对象就出现了内存地址了。

如果非要把基本数据类型的数组转换为集合,而且打印符合我们的预期呢?

public static void main(String[] args) {
Integer[] arr = {1,2,3,4,5};
List<Integer> list = Arrays.asList(arr);
System.out.println(list);
}

2.集合转换成数组

集合转换成数组用Collection接口的toArray方法。

<T> T[]    toArray(T[] a)    返回包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型

public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
/*当集合转换数组时,数组长度如果小于等于集合的size时,转换后的数组长度等于集合的size。
如果数组的长度大于size,分配的数组长度就和指定长度一样,多余的是null
*/
String[] arr = list.toArray(new String[0]);
for (String s:arr) {
System.out.println(s);
}
}

java中的数组与集合相互转换的更多相关文章

  1. Java中的数组与集合

    此文转载自:http://student-lp.iteye.com/blog/2082362 在java编程的过程中,我们不能确定某一类型的对象到底会需要多少,为了解决这个问题,java提供了容纳对象 ...

  2. Java比较器对数组,集合排序一

    数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...

  3. 【JAVA零基础入门系列】Day10 Java中的数组

    什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去. 那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做 ...

  4. 第81节:Java中的数组

    第81节:Java中的数组 本节介绍数组的基本概念,数据就是一种数据结构,可以用来存储多个数据,每个数组中可以存放相同类型的数据.比如,在学校,我们是一个班,这里的班级中每个同学都是这个班级数组中的元 ...

  5. Java学习之路(三):Java中的数组

    数组的概述和定义的格式 数组的作用: 用来存储同种数据类型的多个值 数组的基本概念: 数组是存储同一种数据类型多个元素的集合.就相当于一个容器. 注意:数组既可以存储基本数据类型,也可以存储引用数据类 ...

  6. Java中的数组和方法

    3.1 数组的定义和使用 数组(Array)是用来存储一组相同数据类型数据的集合.数组中的每个数据称为一个元素(element),数组可以分为一维数组,二维数组和多维数组.我们 主要讲解一维数组和二维 ...

  7. java中一个数组不能放不同数据类型的值

    在java中,数组不能放不同数据类型的值. 方法一: 多态 定义数组类型的时候定义为父类,而存进数组为父类的子类 public class test2 { public static void mai ...

  8. Java中的容器(集合)之ArrayList源码解析

    1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...

  9. Java中的容器(集合)之HashMap源码解析

    1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...

随机推荐

  1. BZOJ2730:[HNOI2012]矿场搭建——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2730 https://www.luogu.org/problemnew/show/P3225 听说 ...

  2. 函数strcat实现

    1.函数原型 extern char *strcat(char *dest,const char *src); 注:在C++中,则存在于<cstring>头文件中. 2.函数功能: str ...

  3. HDU.1285 确定比赛名次 (拓扑排序 TopSort)

    HDU.1285 确定比赛名次 (拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 只不过这道的额外要求是,输出字典序最小的那组解.那么解决方案就是 ...

  4. [zhuan]Android程序的真正入口Application

    http://blog.csdn.net/coding_or_coded/article/details/6602560 接触android已经有一段时间了,一直以为android程序的入口是配置文件 ...

  5. dubbox管理中心

    当服务多了,不好管理,可以用管理中心来查看. 管理中心就是一个 web项目(一个war包),可以部署在tomcat下面就能运行了. 用户名密码都是root 每一条服务点开后都可以看生产者和消费者.

  6. UVA315:Network(求割点)

    Network 题目链接:https://vjudge.net/problem/UVA-315 Description: A Telephone Line Company (TLC) is estab ...

  7. Linux 守护进程创建原理及简易方法

    1:什么是Linux下的守护进程 Linux daemon是运行于后台常驻内存的一种特殊进程,周期性的执行或者等待trigger执行某个任务,与用户交互断开,独立于控制终端.一个守护进程的父进程是in ...

  8. HDU 2639 背包第k优解

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. 使用 Rational AppScan 保证 Web 应用的安全性,第 2 部分: 使用 Rational AppScan 应对 Web 应用攻击

    1 当前 Web 安全现状 互联网的发展历史也可以说是攻击与防护不断交织发展的过程.目前,全球因特网用户已达 13.5 亿,用户利用网络进行购物.银行转账支付和各种软件下载,企业用户更是依赖于互联网构 ...

  10. 挖一挖unsigned int和补码

    文章要讨论的是两部分: 1. 原码,反码和补码. 2. short, unsigned short, int, unsigned int, long, unsigned long的表示及转换 1. 原 ...