集合與數組之間的轉換


關鍵技術剖析:

實現List、Set和數組之間轉換的關鍵技術點如下:

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

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

  如果List或Set中元素的類型都為A,那么可以使用帶參數的toArray方法,得到類型為A的數組,具體語句是“(A[])set.toArray(new A[0])”。

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

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

復制代碼
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();

  </span><span style="color: #008000;">//</span><span style="color: #008000;"> 將數組轉換成list</span>
  <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = 0; i &lt; array.length; i++<span style="color: #000000;">) {
     list.add(array[i]);
  }
  System.out.println(</span>"將數組轉換成list的元素個數為:" +<span style="color: #000000;"> list.size());
  list.clear();
  </span><span style="color: #008000;">//</span><span style="color: #008000;"> 直接使用Arrays的asList方法</span>
  list =<span style="color: #000000;"> Arrays.asList(array);
  System.out.println(</span>"將數組轉換成list的元素個數為:" +<span style="color: #000000;"> list.size());

  Set set </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HashSet();
  set.add(</span>"a"<span style="color: #000000;">);
  set.add(</span>"b"<span style="color: #000000;">);
  </span><span style="color: #008000;">//</span><span style="color: #008000;"> 將set轉換為數組</span>
  array =<span style="color: #000000;"> set.toArray();
  array1 </span>= (String[]) set.toArray(<span style="color: #0000ff;">new</span> String[0<span style="color: #000000;">]);
  array2 </span>= (String[]) set.toArray(<span style="color: #0000ff;">new</span><span style="color: #000000;"> String[set.size()]);
  System.out.println(</span>"從Set轉換成的對象數組長度為:" +<span style="color: #000000;"> array.length);
  System.out.println(</span>"從Set轉換成的字符串數組長度為:" +<span style="color: #000000;"> array2.length);
  </span><span style="color: #008000;">//</span><span style="color: #008000;"> 數組轉換成Set
  </span><span style="color: #008000;">//</span><span style="color: #008000;"> 將數組轉換成List后,再用List構造Set</span>
  set = <span style="color: #0000ff;">new</span><span style="color: #000000;"> HashSet(Arrays.asList(array));
  System.out.println(</span>"將數組轉換成Set的元素個數為:" +<span style="color: #000000;"> list.size());
  </span><span style="color: #008000;">//</span><span style="color: #008000;"> 將Set清空,然后把數組轉換成的list全部add</span>

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));

 


免責聲明!

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



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