• 数组和List相互转化(摒弃循环)


    一、数组转List

    1、先定义一个类型为Int的数组,并对这个进行赋值

    1. public class ArraryToList{
    2. public static void main(String[] args) {
    3. int[] List = {11,22,33};
    4. }
    5. }

    2、使用‘Arrarys.asList()’方法,将数组转化成List;需要注意的是,‘asList()’方法的参数类型是泛型,使用‘Arrarys.asList()’方法接收List的参数类型也要是支持泛型的类型,然而在第一步中,我们定义的数组是int类型,所以在类型上不匹配(基本数据类型不能作为泛型),所以我们使Integer

    1. import java.util.Arrays;
    2. import java.util.List;
    3. public class ArraryToList{
    4. public static void main(String[] args) {
    5. // int-基本数据类型,不支持泛型,所以使用Integer
    6. // int[] List = {11,22,33};
    7. Integer[] List = {11,22,33};
    8. List Arrary = Arrays.asList(List);
    9. System.out.println(Arrary);
    10. }
    11. }

    输出结果:

     3、可以发现我们现在对Arrary进行打印输出后,显示的结果已经转换成数组,那么我们可不可以对这个数组进行操作呢?代码如下:

    1. import java.util.Arrays;
    2. import java.util.List;
    3. public class ArraryToList{
    4. public static void main(String[] args) {
    5. // int-基本数据类型,不支持泛型,所以使用Integer
    6. // int[] List = {11,22,33};
    7. Integer[] List = {11,22,33};
    8. List Arrary = Arrays.asList(List);
    9. System.out.println(Arrary);
    10. System.out.println("----添加操作-----");
    11. Arrary.add(44);
    12. System.out.println("----删除操作----");
    13. Arrary.remove(0);
    14. System.out.println("---取值操作----");
    15. System.out.println(Arrary.get(0));
    16. }
    17. }

    分批次运行结果如下: 

     

     

    可以发现这个数组并不能进行“添加”、“删除” 的操作,但是可以进行查询操作。这是为什么呢? 

    这是因为当我们使用Arrarys.asList()的时候,返回的并不是真正意义上的ArraryList,而是arrarys里面定义的私有的内部类

     如果想改变成正常的集合,我们只需要重新定义一个ArraryList即可,将之前的集合放进去,代码如下

    1. ##核心代码如下:
    2. List Arrary = Arrays.asList(List);
    3. ArrayList newArrayList = new ArrayList(Arrary);
    4. ##完整版代码如下:
    5. import java.util.ArrayList;
    6. import java.util.Arrays;
    7. import java.util.List;
    8. public class ArraryToList{
    9. public static void main(String[] args) {
    10. // int-基本数据类型,不支持泛型,所以使用Integer
    11. // int[] List = {11,22,33};
    12. Integer[] List = {11,22,33};
    13. List Arrary = Arrays.asList(List);
    14. ArrayList newArrayList = new ArrayList(Arrary);
    15. System.out.println(newArrayList);
    16. System.out.println("----添加操作-----");
    17. newArrayList.add(44);
    18. System.out.println("----删除操作----");
    19. newArrayList.remove(0);
    20. System.out.println("---取值操作----");
    21. System.out.println(newArrayList.get(0));
    22. System.out.println("再次打印操作后的newArrayList"+newArrayList);
    23. }
    24. }

    执行结果如下:

     二、List转数组

    1、定义一个集合,给集合中添加三个数据,使用'toArrary()'方法将集合转换成数组。

    1. import java.util.ArrayList;
    2. import java.util.Arrays;
    3. import java.util.List;
    4. public class ListToArrary {
    5. public static void main(String[] args) {
    6. ArrayList arrayList = new ArrayList<>();
    7. arrayList.add(11);
    8. arrayList.add(22);
    9. arrayList.add(33);
    10. Object[] objects = arrayList.toArray();
    11. System.out.println(objects);
    12. }
    13. }

     注:toArrary()方法返回的类型就是Object

     所以当直接打印输出的时候,打印的并不是数组里面的数据,而是“地址”

     我们要想获取数据只能对它进行遍历,并对里面的每一个数据进行“造型”,才能获取到数据,代码及执行结果如下

    1. import java.util.ArrayList;
    2. import java.util.Arrays;
    3. import java.util.List;
    4. public class ListToArrary {
    5. public static void main(String[] args) {
    6. ArrayList arrayList = new ArrayList<>();
    7. arrayList.add(11);
    8. arrayList.add(22);
    9. arrayList.add(33);
    10. Object[] objects = arrayList.toArray();
    11. // System.out.println(objects);
    12. for (Object v:objects
    13. ) {
    14. System.out.println((int)v);
    15. }
    16. }
    17. }

    这种方式用起来不是很舒服,需要自己“造型”遍历输出 ;我们还可以使用另一种方式,同样是使用toArrary()方法,但是方法内传递参数(泛型)。具体操作如下

    1. import java.util.ArrayList;
    2. import java.util.Arrays;
    3. import java.util.List;
    4. public class ListToArrary {
    5. public static void main(String[] args) {
    6. ArrayList arrayList = new ArrayList<>();
    7. arrayList.add(11);
    8. arrayList.add(22);
    9. arrayList.add(33);
    10. // 方法一,直接指定好数组的长度
    11. Integer[] Arrary1 = new Integer[arrayList.size()];
    12. // 将arrayList列表装进list1数组里
    13. Integer[] integers = arrayList.toArray(Arrary1);
    14. System.out.println(integers[0]);
    15. // 方法二,定义的数组长度不够
    16. Integer[] Arrary2 = new Integer[0];
    17. // 接收的时候重新定义个数组接收即可
    18. Integer[] Arrary3 = arrayList.toArray(Arrary2);
    19. System.out.println(Arrary1[0]);
    20. }
    21. }

  • 相关阅读:
    c++ 田忌赛马(史上最全)上海月赛乙组T3
    Spring高手之路16——解析XML配置映射为BeanDefinition的源码
    Ajax概述,封装以及联合模板引擎进行数据交互
    解决小程序-wx.canvasGetImageData()-RGB取色盘苹果手机获取颜色慢问题
    使用vscode实现远程开发,并通过内网穿透在公网环境下远程连接
    Python学习路线
    力扣SQL50 每台机器的进程平均运行时间 SUM AVG DISTINCT
    macOS下VS Code 使用记录(使用调试运行 Python/C 等)
    MyBatis-plus:查询操作、分页查询
    微服务架构中间件安装部署
  • 原文地址:https://blog.csdn.net/weixin_45295447/article/details/127778648