數組與arrayList相互轉換


string[] 和 arraylist互轉及問題解決

1,String 數組轉成 list<String>

String[] s={"1","2","3","5","6"};
List<String> listA = Arrays.asList(s);

String 數組在轉成 list<String>後, 直接對該list進行操作, 會出異常,例如:


publicstaticvoid main(String[] args) {
            String[] s={"1","2","3","5","6"};
            List<String> listA = Arrays.asList(s);
            listA.add(3,"4");
            for(String temp:listA){
                System.out.println(temp);
            }
        }

運行時會拋出如下異常:

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


原因分析:

在使用Arrays.asList()後調用add,remove這些method時出現java.lang.UnsupportedOperationException異常。這是由於Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是繼承AbstractList,remove,add等 method在AbstractList中是默認throw UnsupportedOperationException而且不作任何操作。ArrayList override這些method來對list進行操作,但是Arrays$ArrayList沒有override remove(),add()等,所以throw UnsupportedOperationException。 
 
解決方法:
轉換爲ArrayList,例如上面代碼改成如下:

publicstaticvoid main(String[] args) {
            String[] s={"1","2","3","5","6"};
            List<String> listA = Arrays.asList(s);
            List<String> listB = new ArrayList<String>(listA);
            listB.add(3,"4");
            for(String temp:listB){
                System.out.println(temp);
            }
        }

運行結果:輸出 1 2 3 4 5 6

PS: 這裏順便說明一下arraylist 的 remove() add() 特點

1)arraylist add時, 指定了index添加時,原本該index上的位置不會被刪除, 而是從index位置上的數據都向右移。

2)arraylist delete時, 刪除後, 該位置後面的所有數據自動向左移,所以遍歷的時候, index需要-1 纔不會漏掉, 或者直接從倒序遍歷,

例如如下代碼:


publicstaticvoid 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位置漏掉遍歷,所以得到結果不符合預期

改成如下:


publicstaticvoid 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 removefor(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);
            }
        }

運行結果:輸出 1 3 4 5 6

 

2, list<String>轉成String 數組

String[] b = list.toArray(new String[list.size()]);

 

 3,String數組直接轉成string輸出

Arrays.toString(數組名)


原文:http://www.cnblogs.com/jenniferhuang/p/3549845.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章