如何实现 Array, List 和 Set 的相互转换

BlueStragglers 共享技术成长的快乐

1. Array 和 List 互转

Array 转 List:如果用 Arrays.asList 方法,之后修改 Array,会直接改变 List。而且这种方法不能增删(没有 add remove 方法),只能查改(set get contains)。

List 转 Array:如果用 List.toArray 方法,之后修改 List,不会改变 Array。注意参数是提供一个类型即可,如 new String[0]。
方法名是 Arrays.asList() 和 List.toArray()。

List<String> listA = Arrays.asList(stringA);
String[] stringB = List.toArray(new String[0]);

更好的 Array 转 List:将 Arrays.asList() 的返回值由 java.util.Arrays.ArrayList 转换为 java.util.ArrayList,也就是用构造器方法创建返回对象类型。

List<String> listA = new ArrayList<String>(Arrays.asList(stringA));

最高效的 Array 转 List:首先构造对应数组大小的 List 对象,然后用 Collections.addAll() 方法将 Array 的内容添加到 List 对象中。这种方法运算速度最快,适合处理大量数据。

List<String> listA = new ArrayList<>(stringA.length);
Collections.addAll(listA, stringA);

Stream 方法的 Array 转 List:针对数类型和 String 类型,Stream 方法也是不一样的。
对于数类型 Array,首先用 Arrays.stream() 方法将 Array 的内容转换为流类型,随后用 boxed() 方法进行封装,最后再用 collect() 方法进行转换,参数是 Collectors.toList() 方法。
注意这里是 Arrays.stream() 方法,随后还需要用一下 boxed() 方法。比字符串类型麻烦。

List<Integer> listA = Arrays.stream(intA).boxed().collect(Collectors.toList());

对于 String Array,首先用 Stream.of() 方法将 Array 的内容转换为流类型,随后调用 collect() 方法进行转换,参数是 Collectors.toList() 方法。
注意这里是 Collectors,方法名是 toList(),类似的有 toSet(),但是没有 toQueue()。也可以不用那么麻烦,直接 toCollection(),里面可以写 需要的类型::new

List<String> listA = Stream.of(stringA).collect(Collectors.toList());
List<String> listB = Stream.of(stringA).collect(Collectors.toCollection(ArrayList::new));

2. List 和 Set 互转

由于 List 和 Set 都实现了 Collection 接口,因此可以直接将对方作为构造函数的参数进行互转,也可以用 Collections.AddAll()。

List<String> listA = new ArrayList<>(setA);
Set<String> setA = new HashSet<>(listA);
List<String> listA = new ArrayList<>(setA.size());
Collections.addAll(listA, setA);

3. Array 和 Set 互转

参考 Array 和 List 互转即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值