最新公告
  • 欢迎您光临立业阁,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • Java如何将数组转换成List?(代码示例)_Java教程


    有时候我们需要将数组类型转换成为集合类型,因为后者是一个更为强大的数据结构,java.util.List 有许多普通数组不支持的功能。比如:我们可以通过List的内置方法轻易地检测list是否包含某一个特定的值。下面是一些怎么将数组转换为list的例子。

    通过 java.util.Arrays.asList()将 Array 转换成 List

    Arrays 类有一个方便的方法asList,可以帮助转换任务,下面是语法:

    public static <T> List<T> asList(T... a)

    注意:参数不一定必须是数组,可变参数也可以。它可以创建一个lis

    public class Test {
       public static void main(String[] args) {
          List<String> myList = Arrays.asList("Apple");
       }
    }

    以上代码将穿件一个包含一个元素"Apple"的集合。我们也可以这样做:

    public class Test {
       public static void main(String[] args) {
          List<String> myList = Arrays.asList("Apple", "Orange");
       }
    }

    这将生成一个包含两个元素"Apple","Orange"的集合

    因为这是一个可变参数。我们可以传递一个数组,数组元素被认定为参数,例子:

    public class Test {
       public static void main(String[] args) {
          String[] myArray = { "Apple", "Banana", "Orange" };
          List<String> myList = Arrays.asList(myArray);
          for (String str : myList) {
             System.out.println(str);
          }
       }
    }

    这样,一个String集合被创建出来了。数组myArray被添加进去了。myList 集合有三个元素,一下是输出:

    Apple
    Banana
    Orange

    陷阱

    这个方法有一些问题,传递进去的数组必须是一个对象数组,而不能是一个基本类型数组。比如:

    public class Test {
       public static void main(String[] args) {
          int[] myArray = { 1, 2, 3 };
          List myList = Arrays.asList(myArray);
          System.out.println(myList.size());
       }
    }

    代码输出是1。为什么呢?因为asList方法期望一个对象的可变参数,但是传递进去的参数是一个基本类型数组,它创建了一个数组集合。所以该集合的为唯一元素是myArray。因此 myList.get(0) 将返回与myArray同样的对象。

    asList()创建的对象是固定大小的

    asList()方法返回的list对象是固定大小的,不能容纳更多的元素,比如:

    public class Test {
       public static void main(String[] args) {
          String[] myArray = { "Apple", "Banana", "Orange" };
          List<String> myList = Arrays.asList(myArray);
          myList.add("Guava");
       }
    }

    输出如下:

    Exception in thread "main" java.lang.UnsupportedOperationException
        at java.util.AbstractList.add(AbstractList.java:148)
        at java.util.AbstractList.add(AbstractList.java:108)
        at Test.main(Test.java:8)

    因为myList是固定长度的,不能添加更多元素。

    因为该方法返回的List对象不是java.util包下面的ArrayList,而是Arrays内部的ArrayList类型。改类没有实现add,revmove,clear方法,所以任何对改集合结构修改的调用都将失败。

    将基本数组类型转换成List

    正如上面提到的。传递一个基本类型数组到asList方法不生效,一个不引入第三方库的解决办法是通过Java8 的流,例子如下:

    public class Test {
       public static void main(String[] args) {
          int[] intArray = { 5, 10, 21 };
          List myList = Arrays.stream(intArray).boxed()
                .collect(Collectors.toList());
       }
    }

    数组的每一个元素都被从int转换成了Integer类型(装箱),数组就被转成了List类型。

    将数组转换成允许添加元素的List

    正如上面陷阱部分提到的,Arrays.asList()方法不支持添加或者移除元素。如果你不想这样,下面是可选方案:

    public class Test {
       public static void main(String[] args) {
          String[] myArray = { "Apple", "Banana", "Orange" };
          List<String> myList = new ArrayList<String>(Arrays.asList(myArray));
          myList.add("Guava");
       }
    }

    这段代码显式地创建了一个新的ArrayList对象,然后将Arrays.asList的结果添加进去了。因为我们创建了一个ArrayList。所以没有添加移除限制,上面的代码执行结束前有四个元素。不要指望代码执行时抛出异常。

    自己实现Array组转换成List

    有时候解决问题,使用我们自己的实现方案是更好的。下面是一个将java数组转换成List的简单例子:

    public class Test {
       public static void main(String[] args) {
          String[] myArray = { "Apple", "Banana", "Orange" };
          List<String> myList = new ArrayList<String>();
          for (String str : myArray) {
             myList.add(str);
          }
          System.out.println(myList.size());
       }
    }

    代码的预期输出是3.因为逻辑执行完集合了有3个元素。

    我们代码的负面是代码更长了,而且我们在重复造轮子。好处就是当我们的需求改变时,我们可以顺应自定义。比如:下面的代码,每一个元素都被添加到list中两次

    public class Test {
       public static void main(String[] args) {
          String[] myArray = { "Apple", "Banana", "Orange" };
          List<String> myList = new ArrayList<String>();
          for (String str : myArray) {
             myList.add(str);
             myList.add(str);
          }
          System.out.println(myList.size());
       }
    }

    输出是6,因为数组中的元素都被添加两次。下面是另外一个将String数组转换成List<Integer> 的例子:

    public class Test {
       public static void main(String[] args) {
          String[] myArray = { "5", "6", "7" };
          List<Integer> myList = new ArrayList<Integer>();
          for (String str : myArray) {
             myList.add(Integer.valueOf(str));
          }
       }}

    解析数组中的每个String并将其转换为相应的Integer。结果列表将包含所有转换后的整数。

    推荐学习:java视频教程

    以上就是Java如何将数组转换成List?(代码示例)的详细内容,更多请关注liyege.cn其它相关文章!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    • 1155会员总数(位)
    • 111856资源总数(个)
    • 6本周发布(个)
    • 0 今日发布(个)
    • 241稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    冀ICP备19022365号-1 百度地图

    侵权联系邮箱[email protected]

    立业阁(www.liyege.cn)免费提供wordpress主题模板、dedecms模板、帝国cms模板、小说网站源码、电影网站源码以及网络技术分享,建站源码,小说模板,电影模板,网赚教程,VPS推荐