tag数组-刷题预备知识-1. 集合和数组之间的转换(重要)

我们在手撕力扣的时候, 经常能遇到这样类型的题目: 要求你返回值是一个数组, 但是存储的是一个长度未知的一组数或是需要暂时存储一个长度不定的数, 这个时候, 可能大多数想到的就是前期先把需要的数组或者字符串放到集合中, 根据题目需要选择是ArrayList(有序可重复), HashSet(无序不可重复)亦或是k-v对的HashMap, 然后在返回的时候, 把集合转换为数组返回即可
那么, 在遇到上述这种问题时, 我们就不可避免的要用到数组<---->集合之间的相互转换.

零. WARNING: List<Integer> 转换为 int[] 的方法

//jdk8 以上才可支持
 int[] arr = list.stream().mapToInt(Integer::valueOf).toArray();

补充文章: 转换
栗子: 剑指Offer.29-顺时针打印矩阵

一, 集合转为数组 (list.toArray() / list.toArray( T[] a))

常用方法: list.toArray(new Object(size)) , new Object意思是把集合list转换为Obecj类型, 长度为size, 当然了Object可以是常用的Integer[], String等等.

注意: 集合.toArray(new Object(size)) 这种方法, 万万不能用于 List<Integer> 和 int[] 的转换, 即 list.toArray(new int[list.size()]) 是不对的!!!!!!!!


在这里插入图片描述
看几个常用的集合类,如上图继承关系图,可以看到他们都集成了一个抽象类AbstractCollection,这个类中就实现了Collection接口的两个方法:
- toArray ( )
- toArray ( T[ ] a )

前者的返回值是一个Object的数组,Object[],这个数组是不可以进行强制数据类型转换的,如下:
在这里插入图片描述

  • list. toArray ( T[ ] a ) 适用于返回一个给定类型的数组, 比如返回字符数组: list.toArray(new Character[ list.size() ]), 注意这意味着集合中的数据类型也为 Character类型,
  • 在这里插入图片描述

在这里插入图片描述


二, 数组转为集合( List<泛型> list = Arrays.asList(数组) / Collections.addAll(目标集合, 待转数组))

数组转换为集合, 使用 Arrays.asList(待转数组)或者是Collections中.addAll(目标集合, 待转数组)方法.
在这里插入图片描述

三, 集合之间的转换( 目标集合.addAll(待转集合), 返回值是布尔类型)

集合之间互转, 比如把一个treeSet集合转为list集合, list.addAdd(treeset)
在这里插入图片描述

四, 集合与数组, 集合与集合转换栗子大杂烩

 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 }

参考文章:
https://www.runoob.com/java/java-arraylist-addall.html
http://c.biancheng.net/view/4727.html
https://www.cnblogs.com/qiuyu-blog/p/4554658.html
https://blog.csdn.net/weixin_33748818/article/details/85700215
https://www.cnblogs.com/deng-cc/p/8072930.html
https://www.cnblogs.com/ClearX/p/5479125.html

おすすめ

転載: blog.csdn.net/nmsLLCSDN/article/details/121175546