ARTS Share2 java中的数组和list之间的转换

柔情只为你懂 2022-02-27 07:36 291阅读 0赞

这篇文章来分享一下将java中的list转为数组或者将数组转为list的方法,对于集合List和数组在我们平常开发中会经常用到,频率挺高,算法中也是常用的数据结构,所以我们应该熟悉并掌握这两种数据结构以及相关的方法等。

1.将list转为数组,我们通常有两种办法:

  1. //返回一个Object类型的数组
  2. Object[] toArray()
  3. //返回一个类型为T的数组
  4. T[] toArray(T[] array)

toArray(T [] array)方法接受并返回一个数组。 传入数组的主要目的是通知要返回的数组的类型:

示例代码:

  1. List<Integer> list = Arrays.asList(1,2,3,4,5,6);
  2. Object[] objects = list.toArray();
  3. Integer[] integers = list.toArray(new Integer[list.size()]);
  4. //length = 6
  5. System.out.println(objects.length);
  6. //length = 6
  7. System.out.println(integers.length);
  8. /**
  9. * 返回一个数组,该数组包含了这个list中的所有元素并且以合适的顺序存储,从第一个元素到最后一个元素。
  10. * 这个方法必须分配一个新的数组,即使列表由数组支持。因此调用者可以自由修改返回的数组.
  11. * 这个方法就是数组和集合之间API的桥梁,可以进行转换。
  12. */
  13. Object[] toArray();
  14. T[] toArray(T[] array)
  15. /**
  16. * (1)如果传入的数组有足够的空间,则元素存储在同一个数组中,并返回对该数组的引用;
  17. * (2)如果它的空间大于元素个数,则首先使用list的元素填充数组,最后将该数组的其余值填充为null;
  18. * (3)如果它没有足够的空间来存储元素,则会创建一个相同类型和足够大小的新数组,填充并返回。
  19. */
  20. <T> T[] toArray(T[] a);

2.将数组转为List:

(1)采用传统的方法,将数组循环然后将数组的每个元素都add到list中,示例代码如下:

  1. Integer[] arr = {1,2,3};
  2. List<Integer> integerList = new ArrayList<>();
  3. for(Integer i:arr){
  4. integerList.add(i);
  5. }
  6. //[1, 2, 3]
  7. System.out.println(integerList);

(2)使用ArraysasList(T...a)方法

代码示例:

  1. List<Integer> list = Arrays.asList(1,2,3,4,5,6);
  2. //[1, 2, 3, 4, 5, 6]
  3. System.out.println(list);

关于Arrays.asList方法的解释和使用注意点
https://blog.csdn.net/u012934325/article/details/88528582

(3)使用Collections.addAll(Collection<? super T> c, T... elements)将数组元素转为集合:
示例代码:

  1. Integer[] arr1 = {1,2,3};
  2. List<Integer> list1 = new ArrayList<>();
  3. Collections.addAll(list1,arr1);
  4. //[1, 2, 3]
  5. System.out.println(list1);
  6. @SafeVarargs
  7. public static <T> boolean addAll(Collection<? super T> c, T... elements) {
  8. boolean result = false;
  9. for (T element : elements)
  10. result |= c.add(element);
  11. return result;
  12. }

上述源码,第一眼看,就是将数组循环,然后往集合c中添加每个数组元素。但是需要特别注意的是该方法中有一个boolean型的变量result,需要注意的是result |= c.add(element);,这条语句表示将c.add(element)的结果与result的值做或的计算,得到最后的答案,解释如下:

  1. Integer[] a = {1,2};
  2. List<Integer> list2 = new ArrayList<>();
  3. boolean flag = false;
  4. for(Integer num:a){
  5. flag |= list2.add(num);
  6. //1=====true
  7. //2=====true
  8. System.out.println(num + "=====" + flag);
  9. }

这里有个思考,什么时间它result的值会是false,也就是说添加不成功的情况是什么?
解释如下:
如果要添加的所有元素都已经在Collection中(在调用addAll之前),并且Collection不允许重复,则它将返回false,因为所有单独的add方法调用都将返回false。 对于诸如Set之类的集合也是如此。
对于其他集合,add始终返回true,因此addAll将返回true,除非您使用要添加的空元素列表调用它。

(4)利用java8中的方法:

  1. Arrays.stream(a).collect(Collectors.toList()).stream().forEach(System.out::print);

以上就是我对于list和array之间的相互转化,所做的分享,希望各位可以提出其他更好的方法,一起来分享。

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,291人围观)

还没有评论,来说两句吧...

相关阅读