zoukankan      html  css  js  c++  java
  • 关于数组集合之间的转换

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

    在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 }









  • 相关阅读:
    【HDU 1007】Quoit Design
    【BZOJ 4516】【SDOI 2016】生成魔咒
    【SPOJ 1812】Longest Common Substring II
    NOI2014 全国互测Round2
    1231: [Usaco2008 Nov]mixup2 混乱的奶牛
    3529: [Sdoi2014]数表
    2693: jzptab
    2565: 最长双回文串
    1562: [NOI2009]变换序列
    1965: [Ahoi2005]SHUFFLE 洗牌
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4304703.html
Copyright © 2011-2022 走看看