Java中的数组与容器的概念与彼此转换

来源:互联网 发布:新锐软件易制毒电话 编辑:程序博客网 时间:2024/05/17 06:01

这里写图片描述

1、数组与容器的基本概念

  • 数组是Java提供的线性队列实现方式,能存储基础数据类型与对象;
  • 容器是封装的更高级集合实现,底层可能是数组也可能是链表,但容器只能存对象,不能存基础类型。

容器间的关系图:
这里写图片描述

2,List、Set、Map 转换成数组(高级实现转换成基础承载对象的数组)

import java.util.*;public class TestCollection{    public static void main(String args[]) {        List<Integer> list = new ArrayList<>();        for(int i = 0; i < 10; i++) {            list.add(i);        }        //List转数组,实现1        //toArrya()方法的返回类型为Object数组        Object[] array1 = list.toArray();        System.out.println(Arrays.toString(array1));        //List转数组,实现2        Integer[] array2 = list.toArray(new Integer[0]);        System.out.println(Arrays.toString(array2));        //List转数组,实现3        Integer[] array3 = new Integer[list.size()];        list.toArray(array3);        System.out.println(Arrays.toString(array3));    }}

打印结果是

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][0, 1, 2, 3, 4, 5, 6, 7, 8, 9][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

如果想将List Integer转换成int[],最好的方式是遍历这个容器,因为List Integer最多只能转换成 Integer[],以下是将List Integer转换成int[]的示例代码

int[] result = new int[list.size()]for(int i=0;i<list.size();i++){    result[i] = list.get(i);}

2、上面讲了List转数组,其实Map和Set转数组也是一样的方法,因为都是Collection的实现,也给个Demo:

import java.util.*;public class TestCollection{                                                                                               public static void main(String args[]) {        //Set        Set<Integer> set = new HashSet<>();        for(int i = 0; i < 10; i++) {            set.add(i);        }           Integer[] array1 = new Integer[set.size()];        set.toArray(array1);        System.out.println(Arrays.toString(array1));        //Map        Map<Integer, String> map = new HashMap<>();        for(int i = 0; i < 10; i++) {            map.put(1, "hello");            map.put(2, "world");            map.put(3, "!");        }           //Map 的Key转换成数组        Integer[] keys = new Integer[map.size()];        map.keySet().toArray(keys);        System.out.println(Arrays.toString(keys));        //Map 的Value转换成数组        String[] values = new String[map.size()];        map.values().toArray(values);        System.out.println(Arrays.toString(values));    }   }

3, 数组转List、Set,由于数组是基础数据格式,没有封装转换成其他容器的方法,故需借助工具Arrays

import java.util.*;public class TestCollection{    public static void main(String args[]) {        Integer[] array = new Integer[10];        for(int i = 0; i < 10; i++) {            array[i] = i;        }        //数组转List        List<Integer> list = Arrays.asList(array);        System.out.println(list);                                                                                              //数组转Set,先转长List,再转成集合,这里也包含List转Set的方法哦        Set<Integer> set = new HashSet(Arrays.asList(array));    }}

4、List与Set之间的转换

import java.util.*;public class TestCollection{    public static void main(String args[]) {        List<Integer> list = new ArrayList<>();        for(int i = 0; i < 10; i ++) {            list.add(i);        }        //List 转Set        Set<Integer> set = new HashSet<>(list);        System.out.println(set);                                                                                               //Set转List        List<Integer> list2 = new ArrayList<>(set);        System.out.println(list2);    }}

这里有一道题目,给定一个数组[2,10,3,29,10,22]基于Java删除里面重复数据的一个算法

最简单的实现方式

Integer[] init = {2,3,4,2,3,1,2,3,5,6};Set<Integer> result = new HashSet<>(Arrays.toList(array));System.err.println(Arrays.toString(set.toArray()));

打印结果:

[1, 2, 3, 4, 5, 6]

如果想了解容器之间的相互转换,出门左走找【java8-stream】

原创粉丝点击