String[] 与 List间转换

转自:http://www.cnblogs.com/jenniferhuang/p/3549845.html

一、String 数组转成 list<String>

利用Arrays类:

String[] str={"1","2","3","5","6"};
List<String> listStr = Arrays.asList(str);
listStr.add("4");  //这里会报错:
//Exception in thread "main" java.lang.UnsupportedOperationException
//  at java.util.AbstractList.remove(Unknown Source)
//  at java.util.AbstractList$Itr.remove(Unknown Source)
//  at java.util.AbstractCollection.remove(Unknown Source)
//  at BasicJavaTest.main(BasicJavaTest.java:30)

在使用Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是java.util.ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList。但remove、add等修改方法在AbstractList中是默认只throw UnsupportedOperationException而且不作任何操作,Arrays$ArrayList和ArrayList的差别就在于前者没有对这些方法进行重写,后者则有重写这些方法来对list进行实际操作。但其并不是一些人认为的不能修改,类似set(int index, E element)和replaceAll(UnaryOperator operator)这两个方法是可用的。

解决方法是:

String[] str={"1","2","3","5","6"};
List<String> listStr = Arrays.asList(str);
List<String> listStr2 = new ArrayList<String>(Str);
listStr2.add("4");

PS: 这里顺便说明一下arraylist 的 remove()与add() 特点
1)arraylist add时, 指定了index添加时,原本该index上的位置不会被删除, 而是从index位置上的数据都向右移。
2)arraylist delete时, 删除后, 该位置后面的所有数据自动向左移,所以遍历的时候, index需要-1 才不会出现漏数或ArrayIndexOutOfBoundsException,或者直接从倒序遍历。

public static void main(String[] args) {
            String[] s={"1","2","2","3","5","6"};
            List<String> listA = Arrays.asList(s);
            List<String> listB = new ArrayList<String>(listA);
            for(int i=0;i<listB.size();i++){
                if (listB.get(i).equals("2")){
                    listB.remove(i);
                }
            }
            for(String temp:listB){
                System.out.println(temp);
            }
        }

输出:1 2 3 4 5 6。 该原list index=2位置漏掉遍历,所以得到结果不符合预期。

改成如下:

public static void main(String[] args) {
            String[] s={"1","2","2","3","5","6"};
            List<String> listA = Arrays.asList(s);
            List<String> listB = new ArrayList<String>(listA);

            //1. Should reduce 1 once remove
            for(int i=1;i<listB.size();i++){
                if (listB.get(i).equals("2")){
                    listB.remove(i);
                    i--;
                }
            }
            /** 
             * 2. reverse traversal
            for(int i=listB.size()-1;i>=0;i--){
                if (listB.get(i).equals("2")){
                    listB.remove(i);
                }
            }**/
            for(String temp:listB){
                System.out.println(temp);
            }
        }

二、List<String>转成String 数组

String[] b1 = list.toArray(new String[1]); //这里的参数只为指定返回类型,所以与数组的大小无关
Object[] b2 = list.toArray(); //如果不指定的话,只能以Object[]来接收

三、String数组直接转成string输出

Arrays.toString(数组名)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值