当前位置: 首页 > news >正文

关于数组集合之间的转换

开发中经常用到数组和集合之间的转换和集合与集合之间的转换.

在JDK中有现成的API中供我们使用.

1.首先是数组和集合之间的转换:

 

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.List;
 4 
 5 public class CollectionChange {
 6     public static void main(String[] args) {
 7         List<String> list=new ArrayList<String>();
 8         list.add("aa");
 9         list.add("bb");
10         list.add("cc");
11         System.out.println(list);//输出:[aa, bb, cc]
12         //为什么list对象打印出的是正常的数组形式呢?没有看到ArrayList中重写toString()方法?
13         //原因是:ArrayList的父类AbstractList的父类AbstractCollection里面有实现toString()
14         //见代码外边的分析 
15         
16         //直接打印数组对象 打印出的是数组对象对应的哈希编码
17         String[] array = list.toArray(new String[list.size()]);
18         System.out.println(array);
19         
20         //想要打印出数组对象中的数组元素用下面的方法
21         //详细见代码外面的分析
22         System.out.println(Arrays.asList(array));
23     }
24 }

输出结果:

[aa, bb, cc]
[Ljava.lang.String;@e5bbd6
[aa, bb, cc]

 关于打印List对象直接出的是List对象中的内容.

 继承关系图如下:

ArrayList中继承了AbstractList, AbstractList又继承了AbstractCollection

在AbstractCollection中进行了toString()方法的重写

所以直接打印list对象打印出的是list的内容.

 

想要直接打印数组中的内容可以进行循环遍历,也可以用Arrays.asList(array)这个方法.

参看JAVA的API:

asList

public static <T> List<T> asList(T... a)
返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess

此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:

     List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

参数:
a - 支持列表的数组。
返回:
指定数组的列表视图。

2.java集合转数组,有两种方法

      //List转换成数组的操作. Arrays中的asList()或者是Collections中的addAll(...)方法.
String[] array1=new String[]{"aa","bb","cc"}; List<String> list1=Arrays.asList(array); list1.add("dd"); //这种方法生成的List,无法执行添加,删除操作,下面的操作则无此限制. //Exception in thread "main" java.lang.UnsupportedOperationException String[] array2=new String[]{"aa","bb","cc"}; List<String> list2=new ArrayList<String>(); Collections.addAll(list2,array2); list2.add("dd");

 

 

3.下面是集合中各个集合对象转换的小总结

 1 package cn.itcast.collectionChange;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Arrays;
 5 import java.util.HashMap;
 6 import java.util.HashSet;
 7 import java.util.List;
 8 import java.util.Map;
 9 import java.util.Set;
10 
11 public class CollectionChange2 {
12     public static void main(String[] args) {
13         //一.List-->数组    用到了list对象的toArray()方法(返回Object数组 ).
14         List<String> list = new ArrayList<String>();   
15         list.add("tom");   
16         list.add("Jerval");   
17         list.add("WeiSi");   
18         
19         //①对应的Object数组.
20         Object[] objects = list.toArray();//返回Object数组 
21         //打印数组中的元素.
22         System.out.println("objects:"+Arrays.toString(objects));   
23         
24         //②变成相应的String数组.(方式一)list对象的toArray()方法.
25         String[] strings1 = new String[list.size()];   
26         list.toArray(strings1);//将转化后的数组放入已经创建好的对象中   
27         System.out.println("strings1:"+Arrays.toString(strings1)); 
28         
29         //③变成相应的String数组.(方式二)list对象的toArray(T[])方法.
30         //下面的toArray(new String[0])中仅仅是参数要传递一个数组类型.数组要初始化,中括号重要有一个数组.
31         //注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。
32         String[] strings2 = list.toArray(new String[0]);//将转化后的数组赋给新对象   
33         System.out.println("strings2:"+Arrays.toString(strings2));   
34         
35         
36         //二.数组-->List 数组工具类Arrays中的asList()方法.  
37         String[] ss = {"JJ","KK"};   
38         List<String> list1 = Arrays.asList(ss);   
39         List<String> list2 = Arrays.asList("AAA","BBB");   
40         System.out.println(list1);   
41         System.out.println(list2);  
42         
43         
44         //三.Set-->List 直接用List中的构造方法就可以了.
45         //ArrayList(Collection<? extends E> c) 
46         //构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
47         Set<String> set = new HashSet<String>();
48         set.add("11");
49         set.add("11");
50         set.add("33");
51         List<String> list3 = new ArrayList<String>(new HashSet<String>());   
52         List<String> list4 = new ArrayList<String>(set);   
53         
54         //四.List-->Set 
55         //用Set集合中的构造方法
56         Set<String> setx = new HashSet<String>(new ArrayList<String>());  
57         
58         //五.数组-->Set 先把数组用Arrays中的asList变成一个list,然后再转换成Set.   
59         String[] strs = {"AA","BB"};   
60         Set<String> set2 = new HashSet<String>(Arrays.asList(strs));   
61         System.out.println(set2);   
62         
63         //六.Set-->数组   用Set对象中的toArray()方法.
64         Set<String> set3 = new HashSet<String>(Arrays.asList("PP","OO"));  
65         
66         String[] strSet = new String[set3.size()];   
67         set3.toArray(strSet);   
68         System.out.println(Arrays.toString(strSet));  
69         
70         //七.Map操作   
71         Map<String, String> map = new HashMap<String, String>();   
72         map.put("YYY", "UUU");   
73         map.put("RRR", "TTT");   
74         // 将键转化为Set   用keySet()方法.  
75         Set<String> mapKeySet = map.keySet();   
76         
77         // 将值转化为Set     
78         Set<String> mapValuesSet = new HashSet<String>(map.values());  
79         
80         // 将值转化为List     
81         List<String> mapValuesList = new ArrayList<String>(map.values());   
82     }
83 }

 









相关文章:

  • Android Bitmap和Canvas学习笔记
  • 12 redis之aof日志持久化
  • Intersection of Two Linked Lists(链表)
  • FastDfs 文件系统迁移
  • js实现页面重定向
  • 纪念逝去的岁月——C/C++字符串反转
  • 【SICP练习】92 练习2.65
  • 第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器
  • mysql全文索引____ft_min_word_len
  • 浅谈Servlet
  • [推荐]DDOS攻击与防范知识介绍
  • leetcode------Reverse Words in a String
  • js中常用数组方法concat join push pop slice splice shift
  • 那些年,一起学的Java 2-4
  • 那些年,一起学的Java 3-3
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • angular2 简述
  • Date型的使用
  • Java|序列化异常StreamCorruptedException的解决方法
  • java2019面试题北京
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java方法详解
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • React as a UI Runtime(五、列表)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue组件定义
  • 程序员最讨厌的9句话,你可有补充?
  • 基于axios的vue插件,让http请求更简单
  • 技术:超级实用的电脑小技巧
  • 消息队列系列二(IOT中消息队列的应用)
  •  一套莫尔斯电报听写、翻译系统
  • 用mpvue开发微信小程序
  • 阿里云移动端播放器高级功能介绍
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # centos7下FFmpeg环境部署记录
  • #AngularJS#$sce.trustAsResourceUrl
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)c52学习之旅-简单了解单片机
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ..回顾17,展望18
  • .net 4.0发布后不能正常显示图片问题
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 无限分类
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET企业级应用架构设计系列之开场白
  • .net中生成excel后调整宽度
  • :not(:first-child)和:not(:last-child)的用法