`
dyy_gusi
  • 浏览: 207050 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java集合对象和数组对象的转换

    博客分类:
  • Java
阅读更多

    在开发中,我们经常需要将集合对象(List,Set)转换为数组对象,或者将数组对象转换为集合对象。Java提供了相互转换的工具,但是我们使用的时候需要注意,不能乱用滥用。

1、数组对象转换为集合对象

    最暴力的方式是new一个集合对象,然后遍历数组,依次将数组中的元素放入到新的集合中,但是这样做显然过于麻烦。Java中有一个工具类Arrays类,提供一个方法asList()可以直接将数组转换为List集合。但是一定要注意,Arrays.asList(T... a)返回的是一个固定长度的ArrayList,是不能对返回的list进行add或者remove等操作的,因为返回的并不是java.util.ArrayList对象,是java.util.Arrays.ArrayList对象,是Arrays类的内部类。查看源码可以知道如果对该类进行add等操作,是要抛出异常的。该类的定义是起到一个桥梁作用,如果我们需要对转换的List集合进行修改操作,我们可以通过List<T> list = new ArrayList<T>(Arrays.asList(array));的方式,这样产生的list是觉得可以修改的。代码实现如下:

String[] arrStr = {"a","b","c"};

List<String> list1 = Arrays.asList(arrStr);

List<String> list2 = new ArrayList<String>(Arrays.asList(arrStr));

     结论:如果我们需要将数组转换为可修改的集合List就使用List<T> list = new ArrayList<T>(Arrays.asList(array));如果我们对转换的集合不修改就直接使用List list = Arrays.asList(array);

 

2、集合对象转换为数组对象

    这个就简单了一常用了,直接使用List接口的toArray方法。需要注意的是List有两个重载的toArray方法,第一个List.toArray()返回Object[],第二个List.toArray(T[] a)返回T[].那到底使用哪个呢,两种方法有什么区别呢?第一种返回的是Object[]类型,如果我们想要转换的数组的类型不是Object,那就需要向下转型,但是向下转型会导致类型不兼容,所以会抛出异常,但是我们可以遍历Object[]数组,让后将数组中的每一个元素进行类型转换,这样就不会类型转换异常。通常我们使用带参数的方法,这样就可以通过泛型,返回特定类型的数组,就不用再依次转换了。比如我们将List<String>转换为String[],我们可以通过下面的代码实现:

List<String> listStr = new ArrayList<String>();

listStr.add("one");

listStr.add("two");

String[] arrStr1 = listStr.toArray(new String[] {});

String[] arrStr2 = listStr.toArray(arrStr1);

String[] arrStr3 = (String[]) listStr.toArray();//这样是不行的。不能直接将Object[]转换为String[]

     结论:将集合转换为数组,最好使用toArray(T[] t)方法返回指定类型的数组。

3、判断某个元素是否属于集合或者数组

    对于集合对象,提供了直接使用的方法。可以通过contailns方法判断。当然也可以自己使用最暴力的方式,遍历集合中的所有元素。

    对于数组对象,没有直接使用的方法,我们可以使用最暴力的方式,遍历数组,但是显然这样做不优雅。所以我们可以借助上面说的现将数组对象转换为集合对象,然后使用集合的contains方法。如果我们只是想判断特定元素是否存在于数组对象中,不对原数据进行修改,那么就可以直接使用Arrays.asList()方法,生成一个固定大小的List,然后直接使用contains方法,具体代码如下:

List<String> listStr = new ArrayList<String>();

listStr.add("a");

listStr.add("b");

listStr.add("c");

boolean result1 = listStr.contains("d");//false

String[] arrStr= {"a","b","c"};

boolean result2 = Arrays.asList(arrStr).contains("a");//true

  

 

2
3
分享到:
评论

相关推荐

    java List和数组相互转换方法-list集合转数组.md

    list转数组

    Java集合总结.txt

    集合和数组的区别: 1.集合是大小可变的序列,数组在声明后,长度不可变 2.数组只能存放声明时指定的一种数据类型,集合可变存放多种数据类型 3.数组可以存放基本数据类型,集合只能存放对象 ps:要想往集合中...

    enumerables:可迭代的 Java 集合和数组具有功能性

    Enumerables 是 Java 8 集合的包装器,提供 map 和 reduce 等功能方法,同时始终保持不可变和(重新)迭代。 与 Stream 相比,Enumerables 提高了代码的可用性和可读性,尤其是在处理小型内存中的集合时,无需每次...

    Android中ArrayList和数组相互转换

    在我们日常开发中难免会要将ArrayList和数组相互转换,那么如何才能相互转换呢?下面跟着小编一起通过这篇文章学习学习。

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    15.1 关于对象和数组的回顾 15.2 针对对象的操作码 15.3 针对数组的操作码 15.4 一个模拟:“three—dimensional array” 15.5 随书光盘 15.6 资源页 第16章 控制流 16.1 条件分支 16.2 五条件分支 ...

    深入Java虚拟机

    15.1 关于对象和数组的回顾 15.2 针对对象的操作码 15.3 针对数组的操作码 15.4 一个模拟:“Three—Dimensional Array” 15.5 随书光盘 15.6 资源页 第16章 控制流 16.1 条件分支 16.2 五条件分支...

    java初学者必看

    15.3.3 链表和数组链表 15.3.4 链表应用 15.3.5 数组链表应用 15.4 集Set 15.4.1 排序集接口 15.4.2 哈希集和树集 15.4.3 树集应用 15.5 映射Map 15.5.1 映射接口方法 15.5.2 排序映射接口 15.5.3 哈希...

    深入java虚拟机第二版

    15.1 关于对象和数组的回顾 15.2 针对对象的操作码 15.3 针对数组的操作码 15.4 一个模拟:“Three—Dimensional Array” 15.5 随书光盘 15.6 资源页 第16章 控制流 16.1 条件分支 16.2 五条件分支 16.3 ...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    10.5认识Java集合 10.5.1为什么需要集合 10.5.2Java中的集合 10.6使用一维集合 10.6.1认识一维集合 10.6.2使用List集合 10.6.3使用Set集合 10.6.4使用Collections类对集合进行处理 10.6.5使用泛型简化集合...

    深入JAVA虚拟机(第2版)

    15.1 关于对象和数组的回顾 15.2 针对对象的操作码 15.3 针对数组的操作码 15.4 一个模拟:“Three—Dimensional Array” 15.5 随书光盘 15.6 资源页 第16章 控制流 16.1 条件分支 16.2 五条件分支 ...

    androidmap转json字符串、list转json字符串工具类.zip

    java,android map形式和数组list转json字符串 可直接调用

    快学 scala 中文版 带完整目录

    13.14 与Java集合的互操作 213 13.15 并行集合 215 练习 217 第14章 模式匹配和样例类 A2 221 14.1 更好的switch 222 14.2 守卫 223 14.3 模式中的变量 223 14.4 类型模式 224 14.5 匹配数组、列表和元组 ...

    C# Winform数据库应用设计(附开发案例

    第2章嵌套循环和数组. 44 核心技能部分… .45 2.1 VS2008中的调试技巧 45 2.2 嵌套循环 47 2.3 数组. 50 231数组的定义 50 232数组的基木操作 50 233数组的排序 51 任务实训部分… 55 1打印等腰三角形 55 2:数组的...

    一种大数据智能分析平台的数据分析方法及实现技术.doc

    2.5 结构化数据 结构化数据具备特定的数据结构,通常可以转换后最终用二维的结构的数据, 并且其字段的含义明确,是挖掘数据价值的主要对象。 本平台中主要使用Hadoop Impala和Spark SQL来进行结构化数据的处理。...

Global site tag (gtag.js) - Google Analytics