数组与集合的融合使用 与 数组与集合的相互转化

1. 数组与集合的融合使用:将一维数组作为集合的元素

List<int[]> result=new ArrayList<>();  //可以直接将一维数组作为集合的元素,之后可以再将该集合转化为二维数组。用于解决二维数组难以添加、删除的问题!

2. 数组转集合:采用Arrays的asList()方法

public class Main {
    public static void main(String[] args) {

        /**
		 * 注意:在数组转集合的过程中,要注意是否使用了视图的方式直接返回数组中的数据。
		 * 以Arrays.asList()为例,它把数组转换成集合时,
		 * 不能直接使用其修改集合相关的方法:List<String> list = Arrays.asList(strs);
		 * 它的add/remove/clear方法会抛出 UnsupportedOperationException异常。
		 * 这是因为Arrays.asList体现的是适配器模式,后台的数据仍是原有数组。
		 * asList的返回对象是一个Arrays的内部类,它并没有实现集合个数的相关修改操作,这也是抛出异常的原因。
		 * 故,我们应该使用方式:List<String> list = new ArrayList<>(Arrays.asList(strs));
	     */

        //一维数组转为集合
        String[] str1 = {"a","b","c"};

        List<String> list1 = Arrays.asList(str1);
        //list1.add("abc");     //java.lang.UnsupportedOperationException
        System.out.println(list1);   //[a, b, c]

        List<String> list2 = new ArrayList<>(Arrays.asList(str1));
        list2.add("abc");
        System.out.println(list2);   //[a, b, c, abc]


        //二维数组转为集合
        String[][] str2 = {{"a","b","c"},{"d","e","f"}};
        List<List<String>> list3 = new ArrayList<>();
        //list3=new ArrayList<>(Arrays.asList(str2));   //java.lang.Error: Unresolved compilation problem: 
        list3.add(new ArrayList<>(Arrays.asList(str2[0])));
        list3.add(new ArrayList<>(Arrays.asList(str2[1])));
        System.out.println(list3);      //[[a, b, c], [d, e, f]]


    }

}


3. 集合转数组:采用集合的toArray()方法(List集合与Set集合都适用

public class Main {
    public static void main(String[] args) {

        /**
		 * 1.toArray():没有参数,返回的是Object类型数组
		 * 2.toArray(T[] elem):有参数,返回的是T[]类型数组。且参数elem的长度一定要小于等于集合的长度,否则返回的数组长度会以参数的长度为准
		 * 转为一维数组时,不能使用基本数据类型,只能使用它的包装类
		 * 转为二维数组时,不能使用它的包装类,只能使用基本数据类型
		 */

        int[] nums1= {1,2,3};
        int[] nums2= {4,5,6};
        String[] str1= {"a","b","c"};
        String[] str2= {"d","e","f"};

        List<Integer> li1=new ArrayList<>();
        li1.add(1);
        li1.add(2);
        li1.add(3);
        List<Integer> li2=new ArrayList<>();
        li2.add(4);
        li2.add(5);
        li2.add(6);

        //整数型集合转为一维数组
        System.out.println(Arrays.toString(li1.toArray()));                    //[1, 2, 3]
        System.out.println(Arrays.toString(li1.toArray(new Integer[0])));           //[1, 2, 3]
        System.out.println(Arrays.toString(li1.toArray(new Integer[li1.size()])));     //[1, 2, 3]
        //System.out.println(Arrays.toString(li1.toArray(new int[li1.size()])));       //Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
        System.out.println(Arrays.toString(li1.toArray(new Integer[7])));           //[1, 2, 3, null, null, null, null]


        List<String> li3=new ArrayList<>();
        li3.add("a");
        li3.add("b");
        li3.add("c");

        //字符串型集合转为一维数组
        System.out.println(Arrays.toString(li3.toArray()));                   //[a, b, c]
        System.out.println(Arrays.toString(li3.toArray(new String[0])));           //[a, b, c]
        System.out.println(Arrays.toString(li3.toArray(new String[li1.size()])));     //[a, b, c]
        System.out.println(Arrays.toString(li3.toArray(new String[7])));           //[a, b, c, null, null, null, null]


        //整数型集合转为二维数组1
        List<int[]> list1=new ArrayList<>();
        list1.add(nums1);
        list1.add(nums2);
        System.out.println(Arrays.deepToString(list1.toArray()));             //[[1, 2, 3], [4, 5, 6]] 
        System.out.println(Arrays.deepToString(list1.toArray(new int[0][])));     //[[1, 2, 3], [4, 5, 6]] 
        //System.out.println(Arrays.deepToString(list1.toArray(new Integer[0][]))); //java.lang.ArrayStoreException
        System.out.println(Arrays.deepToString(list1.toArray(new int[list1.size()][]))); //[[1, 2, 3], [4, 5, 6]]  
        System.out.println(Arrays.deepToString(list1.toArray(new int[7][])));        //[[1, 2, 3], [4, 5, 6], null, null, null, null, null]

        //整数型集合转为二维数组2
        List<List<Integer>> list2=new ArrayList<>();
        list2.add(li1);
        list2.add(li2);
        System.out.println(Arrays.deepToString(list2.toArray()));   //[[1, 2, 3], [4, 5, 6]]    
        //System.out.println(Arrays.deepToString(list2.toArray(new int[list2.size()][])));  //java.lang.ArrayStoreException


        //字符串型集合转为二维数组
        List<String[]> list3=new ArrayList<>();
        list3.add(str1);
        list3.add(str2);
        System.out.println(Arrays.deepToString(list3.toArray()));                             //[[a, b, c], [d, e, f]]    
        System.out.println(Arrays.deepToString(list3.toArray(new String[0][])));          //[[a, b, c], [d, e, f]]  
        System.out.println(Arrays.deepToString(list3.toArray(new String[list3.size()][])));   //[[a, b, c], [d, e, f]]
        System.out.println(Arrays.deepToString(list3.toArray(new String[7][])));          //[[a, b, c], [d, e, f], null, null, null, null, null]


    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itmengge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值