Array與Arrays的區別(數組轉list)


Array與Arrays的區別(數組轉list)

 
1.數組類Array

   Java中最基本的一個存儲結構。

     提供了動態創建和訪問 Java 數組的方法。其中的元素的類型必須相同。

     效率高,但容量固定且無法動態改變。

     它無法判斷其中實際存有多少元素,length只是告訴我們array的容量。

2、靜態類Arrays

    此靜態類專門用來操作array ,提供搜索、排序、復制等靜態方法。

      equals():比較兩個array是否相等。array擁有相同元素個數,且所有對應元素兩兩相等。

      sort():用來對array進行排序。

      binarySearch():在排好序的array中尋找元素。

      Arrays.asList(array):將數組array轉化為List   (此種方法不正規)

 

 

注意:

為了實現把一個數組轉換成一個ArrayList,很多Java程序員會使用如下的代碼:

 

 

Arrays.asList確實會返回一個ArrayList對象,但是該類是Arrays類 中一個私有靜態內部類,而不是常見的java.util.ArrayList類。這個java.util.Arrays.ArrayList類具有 set(),get(),contains()等方法,但是不具有任何添加或移除元素的任何方法。因為該類的大小(size)是固定的。為了創建出一個真正的ArrayList,代碼應該如下所示:

 

 

 

我們知道,ArrayList的構造方法可以接受一個Collection類型的對象,而我們的 java.util.Arrays.ArrayList正好也是它的一個子類。實際上,更加高效的代碼示例是:

 

 

 

(正確的做法是test2和test3的做法)

復制代碼
package Array2List;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.junit.Test;

public class Array2List {

    /**
     * 錯誤的做法 此種方法返回的list不具有任何添加或移除元素的任何方法。因為該類的大小(size)是固定的。
     */
    @Test
    public void test1() {
        String attr[] = { "1", "2", "3" };
        List<String> list = Arrays.asList(attr);
        list.add("4");// 報錯
        for (String s : list) {
            System.out.println(s);
        }
    }

    /**
     * 正確的做法 
     * ArrayList的構造方法可以接受一個Collection類型的對象,而我們的 java.util.Arrays.ArrayList正好也是它的一個子類
     */
    @Test
    public void test2() {
        String attr[] = { "1", "2", "3" };
        List<String> list = new ArrayList<String>(Arrays.asList(attr));
        list.add("4");// 不會報錯
        for (String s : list) {
            System.out.println(s);// 1234
        }
    }

    /**
     * 更加高效的做法
     *  ArrayList的構造方法可以接受一個Collection類型的對象,而我們的 java.util.Arrays.ArrayList正好也是它的一個子類
     */

    @Test
    public void test3() {
        String attr[] = { "1", "2", "3" };
        List<String> list = new ArrayList<String>(attr.length);
        Collections.addAll(list, attr);
        list.add("4");// 不會報錯
        for (String s : list) {
            System.out.println(s);// 1234
        }
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM