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. BZOJ1076:[SCOI2008]奖励关——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1076 https://www.luogu.org/problemnew/show/P2473 你正在 ...

  2. UVA.839 Not so Mobile ( 二叉树 DFS)

    UVA.839 Not so Mobile ( 二叉树 DFS) 题意分析 给出一份天平,判断天平是否平衡. 一开始使用的是保存每个节点,节点存储着两边的质量和距离,但是一直是Runtime erro ...

  3. Linux之SSL安全套接字20160704

    使用SSL前,先有 基本的TCP套接字连接.见demo代码 SSL_library_init();//在使用OpenSSL 之前,必须进行相应的协议初始化工作 OpenSSL_add_all_algo ...

  4. SSO解决session共享的几种方案

    之前做项目遇到了这个sso系统,当时只是理解了一部分,今天偶尔发现一篇文章,觉得写的不错,增加了sso知识: 单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用, ...

  5. ZooKeeper文档(二)

    ZooKeeper:因为协调的分布式系统是一个动物园 ZooKeeper对分布式应用来说是一个高性能的协调服务.它暴露通常的服务-比如命名,配置管理,同步,和组服务-用一种简单的接口,所以你不用从头开 ...

  6. Android应用自动更新功能的代码实现(转)

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必 ...

  7. [USACO06NOV] Roadblocks

    https://www.luogu.org/problem/show?pid=2865 题目描述 Bessie has moved to a small farm and sometimes enjo ...

  8. 【poj3621】最优比率环

    题意: 给定n个点,每个点有一个开心度F[i],每个点有m条单向边,每条边有一个长度d,要求一个环,使得它的 开心度的和/长度和 这个比值最大.n<=1000,m<=5000 题解: 最优 ...

  9. 【Foreign】K优解 [堆]

    K优解 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定n个行数,每行m个.在每行中选出一个数来,求出前 k 小的异或和. Input 第 ...

  10. 【LibreOJ】#541. 「LibreOJ NOIP Round #1」七曜圣贤

    [题意]一开始车上有编号为0~a的红茶,过程中出现的红茶编号仅有[0,b),有三种操作: 1.买进编号未在车上出现过的红茶. 2.丢掉车上指定编号的红茶. 3.将最早丢出去的红茶捡回来. 每次操作后求 ...