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

在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()方法的重写

关于数组集合之间的转换_构造方法_02

所以直接打印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 }


 









作者:SummerChill