集合與數組之間的轉換

  數組和List、Set均可以存放多個元素,數組的特色是長度固定,訪問速度很是快,元素類型單一;List的特色是長度能夠動態增長,可以維護元素的次序,存入的全部元素都當作Object,容許元素重複;Set的特色是長度能夠動態增長,可以保證元素不重複,存入的全部元素都當作Object。本節實例介紹Set、List和數組之間如何轉換,將Set、List對象中的元素轉換爲數組,將數組轉換爲Set、List對象,轉換過程當中元素保持不變。java

關鍵技術剖析:數組

實現List、Set和數組之間轉換的關鍵技術點以下:源碼分析

  List轉換成數組可使用List的toArray方法,返回一個Object數組。spa

  Set轉換成數組可使用Set的toArray方法,返回一個Object數組。code

  若是List或Set中元素的類型都爲A,那麼可使用帶參數的toArray方法,獲得類型爲A的數組,具體語句是「(A[])set.toArray(new A[0])」。xml

  數組轉換成List可使用Arrays的asList靜態方法,獲得一個List。對象

  數組轉化成Set時,須要先將數組轉化成List再用List構造Set。blog

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
 
public class TestCollectionToArray {
 
   public static void main(String[] args) {
      List list = new ArrayList();
      list.add("a");
      list.add("b");
      list.add("c");
      list.add("d");
      // list.add(1);//會產生java.lang.ArrayStoreException異常
      // 當list中的數據類型都一致時能夠將list轉化爲數組
      Object[] array = list.toArray();
      System.out.println("從list轉換成的對象數組長度爲:" + array.length);
      // 在轉化爲其它類型的數組時須要強制類型轉換,而且,要使用帶參數的toArray方法,參數爲對象數組,
      // 將list中的內容放入參數數組中,當參數數組的長度小於list的元素個數時,會自動擴充數組的長度以適應list的長度
      String[] array1 = (String[]) list.toArray(new String[0]);
      System.out.println("從list轉換成的字符串數組長度爲:" + array1.length);
      // 分配一個長度與list的長度相等的字符串數組
      String[] array2 = (String[]) list.toArray(new String[list.size()]);
      System.out.println("從list轉換成的字符串數組長度爲:" + array2.length);
      list.clear();
 
      // 將數組轉換成list
      for (int i = 0; i < array.length; i++) {
         list.add(array[i]);
      }
      System.out.println("將數組轉換成list的元素個數爲:" + list.size());
      list.clear();
      // 直接使用Arrays的asList方法
      list = Arrays.asList(array);
      System.out.println("將數組轉換成list的元素個數爲:" + list.size());
 
      Set set = new HashSet();
      set.add("a");
      set.add("b");
      // 將set轉換爲數組
      array = set.toArray();
      array1 = (String[]) set.toArray(new String[0]);
      array2 = (String[]) set.toArray(new String[set.size()]);
      System.out.println("從Set轉換成的對象數組長度爲:" + array.length);
      System.out.println("從Set轉換成的字符串數組長度爲:" + array2.length);
      // 數組轉換成Set
      // 將數組轉換成List後,再用List構造Set
      set = new HashSet(Arrays.asList(array));
      System.out.println("將數組轉換成Set的元素個數爲:" + list.size());
      // 將Set清空,而後把數組轉換成的list所有add
      set.clear();
      set.addAll(Arrays.asList(array1));
      System.out.println("將數組轉換成Set的元素個數爲:" + list.size());
   }
}

輸出結果爲:字符串

  從list轉換成的對象數組長度爲:4源碼

  從list轉換成的字符串數組長度爲:4

  從list轉換成的字符串數組長度爲:4

  將數組轉換成list的元素個數爲:4

  將數組轉換成list的元素個數爲:4

  從Set轉換成的對象數組長度爲:2

  從Set轉換成的字符串數組長度爲:2

  將數組轉換成Set的元素個數爲:4

  將數組轉換成Set的元素個數爲:4

源碼分析:

l . 當list或Set中元素類型單一時,可使用帶參數的toArray方法,參數爲目標數組對象,若是目標數組長度小於List或Set的元素個數時,在轉化時自動把目標數組長度調整到L,若是目標數組長度大於L,轉化時將List或Set的元素放到目標數組的前L個位置。轉化後須要進行強制類型轉換,才能獲得目標數組。array1 = (String[]) set.toArray(new String[0]); array2 = (String[]) set.toArray(new String[set.size()]);

2. 數組轉化爲List或Set時須要藉助Arrays的asList方法,它將數組轉化成一個List,能夠用這個List構造Set。Set set = new HashSet(Arrays.asList(array));

相關文章
相關標籤/搜索