zoukankan      html  css  js  c++  java
  • Java如何正确的将数值转化为ArrayList?

    Java中使用工具类Arrays.asList()看似可以把一个数组转为List,但实际使用时有两个坑:1、它是泛型方法,传入的参数必须是对象数组,当传入一个原生数据类型数组时,Arrays.asList() 的真正得到的参数就不是数组中的元素,而是数组对象本身。比如传入int[] intArray={1,2,3},它返回的list只有一个元素就是intArray。
    2、Arrays.asList() 方法返回的并不是 java.util.ArrayList ,而是 java.util.Arrays 的一个内部类,这个内部类并没有实现集合的修改方法或者说并没有重写这些方法,即它返回的List并不能当成一个真正的ArrayList对象来用。

    那么如何真正将Java数组转化为ArrayList呢? 

    1. 自己动手实现(教育目的)

    //JDK1.5+ static <T> List<T> arrayToList(final T[] array) {   final List<T> l = new ArrayList<T>(array.length);    for (final T s : array) {     l.add(s);   }   return (l); }
    Integer [] myArray = { 1, 2, 3 }; System.out.println(arrayToList(myArray).getClass());//class java.util.ArrayList

    2. 最简便的方法(推荐)

    List list = new ArrayList<>(Arrays.asList("a", "b", "c"))

    3. 使用 Java8 的Stream(推荐)

    Integer [] myArray = { 1, 2, 3 }; List myList = Arrays.stream(myArray).collect(Collectors.toList()); //基本类型也可以实现转换(依赖boxed的装箱操作) int [] myArray2 = { 1, 2, 3 }; List myList = Arrays.stream(myArray2).boxed().collect(Collectors.toList());

    4. 使用 Guava(推荐)

    对于不可变集合,你可以使用ImmutableList类及其of()copyOf()工厂方法:(参数不能为空)

    List<String> il = ImmutableList.of("string", "elements");  // from varargs List<String> il = ImmutableList.copyOf(aStringArray);      // from array

    对于可变集合,你可以使用Lists类及其newArrayList()工厂方法:

    List<String> l1 = Lists.newArrayList(anotherListOrCollection);    // from collection List<String> l2 = Lists.newArrayList(aStringArray);               // from array List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs

    5. 使用 Apache Commons Collections

    List<String> list = new ArrayList<String>(); CollectionUtils.addAll(list, str);
  • 相关阅读:
    Two strings CodeForces
    Dasha and Photos CodeForces
    Largest Beautiful Number CodeForces
    Timetable CodeForces
    Financiers Game CodeForces
    AC日记——整理药名 openjudge 1.7 15
    AC日记——大小写字母互换 openjudge 1.7 14
    AC日记——将字符串中的小写字母换成大写字母 openjudge 1.7 13
    AC日记——加密的病历单 openjudge 1.7 12
    AC日记——潜伏着 openjudge 1.7 11
  • 原文地址:https://www.cnblogs.com/doit8791/p/11235676.html
Copyright © 2011-2022 走看看