当前位置: 首页 > news >正文

Java中List和Array转换

文章目录

  • List -> Array
    • 1. 调用toArray()方法直接返回一个Object[]数组:
    • 2. 给toArray(T[])传入一个类型相同的Array,List内部自动把元素复制到传入的Array中:
    • 3. 通过List接口定义的T[] toArray(IntFunction<T[]> generator)方法:
  • Array-> List

List -> Array

1. 调用toArray()方法直接返回一个Object[]数组:

import java.util.List;
public class Main {public static void main(String[] args) {List<String> list = List.of("apple", "pear", "banana");Object[] array = list.toArray();for (Object s : array) {System.out.println(s);}}
}

这种方法会丢失类型信息,所以实际应用很少。

2. 给toArray(T[])传入一个类型相同的Array,List内部自动把元素复制到传入的Array中:

import java.util.List;
public class Main {public static void main(String[] args) {List<Integer> list = List.of(12, 34, 56);Integer[] array = list.toArray(new Integer[3]);for (Integer n : array) {System.out.println(n);}}
}

注意到这个toArray(T[])方法的泛型参数并不是List接口定义的泛型参数,所以,我们实际上可以传入其他类型的数组,例如我们传入Number类型的数组,返回的仍然是Number类型:

import java.util.List;
public class Main {public static void main(String[] args) {List<Integer> list = List.of(12, 34, 56);Number[] array = list.toArray(new Number[3]);for (Number n : array) {System.out.println(n);}}
}

但是,如果我们传入类型不匹配的数组,例如,String[]类型的数组,由于List的元素是Integer,所以无法放入String数组,这个方法会抛出ArrayStoreException。

如果我们传入的数组大小和List实际的元素个数不一致怎么办?根据List接口的文档,我们可以知道:

如果传入的数组不够大,那么List内部会创建一个新的刚好够大的数组,填充后返回;如果传入的数组比List元素还要多,那么填充完元素后,剩下的数组元素一律填充null。

实际上,最常用的是传入一个“恰好”大小的数组:

Integer[] array = list.toArray(new Integer[list.size()]);

3. 通过List接口定义的T[] toArray(IntFunction<T[]> generator)方法:

Integer[] array = list.toArray(Integer[]::new);

这种函数式写法我们会在后续讲到。

Array-> List

通过List.of(T…)方法最简单:

Integer[] array = { 1, 2, 3 };
List<Integer> list = List.of(array);

对于JDK 11之前的版本,可以使用Arrays.asList(T…)方法把数组转换成List。

要注意的是,返回的List不一定就是ArrayList或者LinkedList,因为List只是一个接口,如果我们调用List.of(),它返回的是一个只读List:

import java.util.List;
public class Main {public static void main(String[] args) {List<Integer> list = List.of(12, 34, 56);list.add(999); // UnsupportedOperationException}
}

对只读List调用add()、remove()方法会抛出UnsupportedOperationException。

http://www.lryc.cn/news/69991.html

相关文章:

  • 如何能确定数据库中root用户的密码是什么
  • 由浅入深Netty协议设计与解析
  • iptables防火墙(1)
  • 第九章 Productions最佳实践 - Productions开发的最佳实践
  • RocketMQ 怎么实现的消息负载均衡以及怎么能够保证消息被顺序消费
  • 【随笔记】全志 T507 PF4 引脚无法被正常设置为中断模式的问题分析
  • 人手一个 Midjourney,StableStudio 重磅开源!
  • iptables防火墙(2)
  • Windows和Kali上使用proxychains代理流量
  • KEYSIGHT MSOS204A 2GHZ 4通道DSOS204A高清晰度示波器
  • 最新Java适配商城系统
  • 【KVM虚拟化】· virsh管理命令
  • JS Es6中判断b数组对象是否有跟a数组对象相同的数值(例如:id),有的话就过滤掉
  • python获取某电商平台口红数据并制作词云
  • 阿里成立AIDC,用“增长”解题国际化
  • 全面理解:在计算机科学中同步、异步、并行、并发,他们之间到底有什么区别,如果正确更好的区分它们?
  • 9、Ray核心框架介绍
  • 【华为OD机试python】工单调度策略【 2023 Q1 A卷|100分】
  • [论文阅读72]Parameter-Efficient Transfer Learning for NLP
  • 0基础转行居然拿到9.5K!尘埃深处是繁花,强者从未停下!
  • 软考初级程序员上午单选题(13)
  • 【WSN覆盖】基于麻雀搜索算法的三维无线传感器网络覆盖优化 三维WSN覆盖优化【Matlab代码#26】
  • 【学习日记2023.5.20】 之 菜品模块完善
  • MySQL高级SQL语句
  • rem和em的区别和使用场景,以及如何在实际开发中灵活运用它们
  • JDK源码阅读环境搭建
  • 基本定时器工作模式
  • 【华为OD机试真题2023B卷 JAVA】报文重排序
  • 【Docker】- 02 Docker-Compose
  • 工业相机的Pixel Binning和Pixel Skipping