1. 程式人生 > >關於Arrays類中toArray方法的總結

關於Arrays類中toArray方法的總結

  學了差不多兩年的Java,陣列類Arrays應該是我最常用到的類之一了,在整個學習的過程中,會更常用到一個方法,那就是toArray方法,因為將Collections型別的集合轉化為陣列後,將會更容易進行輸出,個單個的便利迴圈處理:但是這個方法有幾個特別需要注意的地方,希望對後來的初學者有些作用,也希望大家批評指正!

首先看一下下列的程式碼:

importjava.util.ArrayList;

  import java.util.List;

  public class Test {

  public static void main(String[]args) {

  List list = new ArrayList();

  list.add("1");

  list.add("2");

  String[] tt =(String[])list.toArray(new String[0]);

  }

  }

這段程式碼是沒問題的,但我們看到String[] tt =(String[]) list.toArray(newString[0])中的引數很奇怪,然而去掉這個引數new String[0]卻在執行時報錯,其實

oArray有兩個方法:

  public Object[] toArray() {

  Object[] result = newObject[size];

  System.arraycopy(elementData, 0,result, 0, size);

  return result;

  }

  不帶引數的toArray方法,是構造的一個Object陣列,然後進行資料拷貝,此時進行轉型就會產生ClassCastException,這也就是上述問題的rootcause了。

  public Object[] toArray(Objecta[]) {

  if (a.length < size)

  a =(Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(),size);       System.arraycopy(elementData, 0, a,0, size);

  if (a.length > size)

  a[size] = null;

  return a;

  }

  而帶引數的toArray方法,則是根據引數陣列的型別,構造了一個對應型別的,長度跟ArrayListsize一致的空陣列,雖然方法本身還是以Object陣列的形式返回結果,不過由於構造陣列使用的ComponentType跟需要轉型的ComponentType一致,就不會產生轉型異常。


相關推薦

關於ArraystoArray方法總結

  學了差不多兩年的Java,陣列類Arrays應該是我最常用到的類之一了,在整個學習的過程中,會更常用到一個方法,那就是toArray方法,因為將Collections型別的集合轉化為陣列後,將會

利用Arrays方法對陣列進行排序

package com.hongdou.java; import java.util.Arrays; public class MathDemo { public static void ma

ArrayListtoArray()與ArraystoArray()方法注意問題

1.Arrays類是一個 final 類,其類中含有一個私有的 ArrayList, ArrayList的定義與 java.util.ArrayList中的定義相同。 java原始碼: pu

javaArrays,binarySearch()方法的返回值問題

.cn pac rom 第一個 mage sea div arch x11 最近在復習Java知識,發現果然不經常使用忘得非常快。。。 看到binarySearch()方法的使用時,發現書上有點錯誤,於是就自己上機實驗了一下,最後總結一下該方法的返回值。 總結:bina

在Pandas更改列的數據型【方法總結

efi 單獨 推斷 浮點 強制 The 時間 title 其中 先看一個非常簡單的例子: a = [[‘a‘, ‘1.2‘, ‘4.2‘], [‘b‘, ‘70‘, ‘0.03‘], [‘x‘, ‘5‘, ‘0‘]] df = pd.DataFrame(a) 有什麽

java Arrays 的主要方法和屬性說明

java 中的 Arrays類的主要方法和屬性說明 Java提供的 Arrays類裡包含的一些static修飾的方法可以直接運算元組,這個 Arrays類裡包含了如下幾個 static修飾的方法( static修飾的方法可以直接通過類名呼叫) 返回值 函

個人總結之類 Arrays的常用方法

此類包含用來運算元組binary Search(比如排序和搜尋)的各種方法。此類還包含一個允許將陣列作為列表來檢視的靜態工廠。 都是靜態方法,直接用類名Arrays呼叫。  比較常用的有:1.折半查詢法binarySearch2.拷貝陣列copyOf3.指定範圍複製陣列co

JavaArrays的binarySearch方法詳解

1.它有很多過載的方法: static int 使用二分搜尋法來搜尋指定的 byte 型陣列,以獲得指定的值。 static int (byte[] a, int fromIndex, int toIndex, byte key) 使用二分搜尋法來搜尋指定的 byte

ArraysArrays.asList()方法

Arrays類——Arrays.asList()方法使用   標籤: array arrays array.aslist java.util 類 Arrays java.lang.Object——java.util.Arrays public class Arrays ex

Iterator方法next()如何用

find explain != itl mil void ash package args 這是一道比較簡單的詞典管理的題目,實現查詞,添加詞語,添加同義詞,查同義詞的功能,當然啦,用到Map(映射)! 1.這是JavaAPI文檔中對方法next()的簡單介紹,我遇到的問題

Java反射機制demo(五)—獲得並調用一個方法

color 擁有 oca logs over super getmethod equals() bool 這個demo在使用反射機制操作屬性之前,主要原因是因為在.class文件字節碼中,方法排在屬性的前面。 1,獲得一個類中的方法 先看一下方法和運行結果。獲取所有的方

JavaSE8基礎 多態 子沒有重寫 父引用調用父方法

win tca 訪問 子類 pub ava alt lease highlight os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0)

Unity擴展GameObject等方法

!= col images 封裝 troy get unity 有時 使用 有時我們想在添加組件時避免重復添加,就需要先把存在的組件刪除。於是寫出擴展方法封裝AddComponent。 public static class Assist { public

WebForm.aspx 頁面通過 AJAX 訪問WebForm.aspx.cs方法,獲取數據(轉)

html ref doc tran jquery helper event query sender WebForm.aspx 頁面通過 AJAX 訪問WebForm.aspx.cs類中的方法,獲取數據 WebForm1.aspx 頁面 (原生AJAX請求,寫法一) &l

一個項目如何引用另一個項目方法

多種方法 技術 .com 目的 如何 同學 src .cn eight     這裏可能有多種方法,但是由於我是新手,暫且只會一種方法。     由於我用的是MAVEN來導入另一個項目。所以如果沒用到MAVEN的同學看到了我的這句話,基本上就可以不用往下看了     

Object方法

保持 rup clas throw second 我們 space hexstring sco 方法一 Object() 即Object的構造方法 Java中規定,每個類都有一個默認的無參構造器,此方法也就是用來體現這一特性方法二 registerNatives

Python 裝飾器裝飾方法(轉)

some print raised blog python bject decorate pass div def catch_exception(origin_func): def wrapper(self, *args, **kwargs): try: u = orig

C#通過反射獲取方法和參數個數,反射調用方法帶參數

new [] 反射 電腦 ram col sta body create using System; using System.Reflection; namespace ConsoleApp2 { class Program { sta

Scrapy(爬蟲框架),Spiderparse()方法的工作機制

生成 工作 就會 ffffff 遞歸 賦值 () 其他 根據 parse(self,response):當請求url返回網頁沒有指定回調函數,默認的Request對象的回調函數,用來處理網頁返回的response,和生成的Item或者Request對象 以下分析一下pars

泛型方法或泛型方法是內部調用、PInvoke 或是在 COM 導入定義的。

imp services != keys inter 解決 ade dex virt 泛型基類中引用Api函數定義時static extern,在子類中會提示: 未處理TypeLoadException 泛型方法或泛型類中的方法是內部調用、PInvoke 或是在 COM 導