導航:首頁 > 編程語言 > javalist轉化為數組

javalist轉化為數組

發布時間:2023-05-20 04:42:29

java 怎麼把list轉換成數組

ArrayList<String> list=new ArrayList<String>();
String strings[]=(String [])list.toArray();
這樣寫代碼個人覺得應該沒什麼問題,編譯也沒有問題。可是具體運行的時候報異常,如下:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
但是這么寫是沒有問題的:
ArrayList<String> list=new ArrayList<String>();
String strings[]=new String[list.size()];
for(int i=0,j=list.size();i<j;i++){
strings[i]=list.get(i);
}
對於這個現象我們可以這么解釋:Java中允許向上和向下轉型,但是這個轉型是否成功是根據Java虛擬機中這個對象的類型來實現的。Java虛擬機中保存了每個對象的類型。而數組也是一個對象。數組的類型是[Ljava.lang.Object。把[Ljava.lang.Object轉換成[Ljava.lang.String是顯然不可能的事情,因為這里是一個向下轉型,而虛擬機只保存了這是一個Object的數組,不能保證數組中的元素是String的,所以這個轉型不能成功。數組裡面的元素只是元素的引用,不是存儲的具體元素,所以數組中元素的類型還是保存在Java虛擬機中的。
根據上面的解釋,我們可以把這個問題歸納到下面這個模型:
Object objs[]=new Object[10];
String strs[]=(String[])objs;
這樣子和剛才上面編譯錯誤是一樣的。如果我們修改一下這個代碼,如下:
String strs[]=new String[10];
Object objs[]=strs;
這樣子就可以編譯通過了。所以這個問題我們可以歸結為一個Java轉型規則的問題。下面談一下Java數組對范型的支持問題。
JDK5中已經有了對范型的支持,這樣可以保證在集合和Map中的數據類型的安全,可是,List的toArray方法返回的竟然是Object []讓人很迷惑。個人感覺應該可以根據范型,直接返回相應的T []。仔細看了一下JDK的發現List轉化為array有兩個方法:
public Object[] toArray();
這個方法把List中的全部元素返回一個相同大小的數組,數組中的所有元素都為Object類型。
public <T> T[] toArray(T[] a);
這個方法把List中的全部元素返回一個相同大小的數組,數組中的所有元素都為T類型。
List如此設計是因為Java編譯器不允許我們new范型數組。也就是說你不能這么定義一個數組:
T arr=new T[size];
但是你卻可以用T[]來表示數組,而且可以把數組強制轉化為T[]。比如List中的public <T> T[] toArray(T[] a)是這么實現的:
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), size);
System.array(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
從上面代碼中可以看到,因為你不知道這個數組的類型,你必須通過反射機制創建這個數組(a.getClass().getComponentType()方法是取得一個數組元素的類型)。
最終,List轉換為Array可以這樣處理:
ArrayList<String> list=new ArrayList<String>();
String[] strings = new String[list.size()];
list.toArray(strings);
反過來,如果要將數組轉成List怎麼辦呢?如下:
String[] s = {"a","b","c"};
List list = java.util.Arrays.asList(s);

② java arraylist怎麼轉化成數組

publicclassTest{
publicstaticvoidmain(String[]args){
List<String>list=newArrayList<String>();
list.add("王利虎");
list.add("張三");
list.add("李四");
intsize=list.size();
String[]array=(String[])list.toArray(newString[size]);
for(inti=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}

請採納內,謝謝容

③ java list轉換成二維數組

Object[][] data=new Object[list.size()][4];
for(int i;i<list.size();i++){
Swingtext sw = list.get(i);
data[i][0]=sw.getName();
data[i][1]=sw.getId();
data[i][2]=sw.getMoney();
data[i][3]=sw.getMore();
}

大概就是這樣

④ Java如何將List 賦值到數組

首先取出styleid欄位的值,假設是字元串String styleid="a/b/c";
然後String[] s = styleid.split("/"); s就是字元串數組,s[0]="a";s[1]="b";s[3]="c"

⑤ java怎麼把list轉成數組

publicstaticvoidlistToarray(){List<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");String[]arr=(String[])list.toArray(newString[list.size()]);for(inti=0;i<arr.length;i++){System.out.println(arr[i]);}}

⑥ java 自定義List怎樣轉換成二維數組

list應該有對應的方法的

⑦ java怎麼把list轉化成數組

publicstaticvoidlistToarray()
{
List<String>list=newArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
String[]arr=(String[])list.toArray(newString[list.size()]);
for(inti=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}

}

⑧ java中list怎麼轉為數組

list集合有個方法直接調用就可以了 Object [] obj = lsit.toArray(); 返回的就是數組了

⑨ java 將返回list型 改為 返回數組型

兩種方案:
第一種:(推薦使用這種)
只要修改返回類型,並把
return tmplist改成return tmplist.totoArray();就行了 取出的是Object數組,需要強制轉換成HashMap;

//返回值是數組
public Object[] quyListBySqlAndParams(String querystr, List params,int dno) throws SQLException {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rst = null;
ResultSetMetaData rsmd = null;

List tmplist=new ArrayList();

try{

conn = myDataUtil.getConnection(dno);
pstmt = conn.prepareStatement(querystr);
//參數賦值
for(int i=0;i<params.size();i++){
String param = params.get(i)==null?"":params.get(i).toString().trim();
pstmt.setString(i+1,param);
}

rst = pstmt.executeQuery();
rsmd = rst.getMetaData();

while (rst.next()) {

Map tmpmap = new HashMap();
for ( int i = 1; i <= rsmd.getColumnCount(); i++ ){
tmpmap.put(rsmd.getColumnName(i), rst.getObject(i));
}
tmplist.add(tmpmap);
}

}catch(Exception e){
System.out.println("pubgetstr"+e.toString()+querystr);
}finally{
myDataUtil.free(rst,pstmt,conn);

//這里調用toArray()方法返回數組
return tmplist.toArray();
}
}


方案二:
原理就是將結果集的游標定位到最後一行,然後通過返回行號確定記錄數,從而確定數組的長度。然後再將游標回退到beforefirst

但是一定要注意 這么做有個地方要考慮, 默認的ResultSet類型是TYPE_FORWARD_ONLY,只向前的游標,不允許指針回退;在定義時要將默認的ResultSet類型里的TYPE_FORWARD_ONLY改成ResultSet.TYPE_SCROLL_INSENSITIVE,把你那句改成這個
pstmt = conn.prepareStatement(querystr, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

//返回數組
public Object[] quyListBySqlAndParams(String querystr, List params,int dno) throws SQLException {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rst = null;
ResultSetMetaData rsmd = null;

Object[] tmpAarry;

try{

conn = myDataUtil.getConnection(dno);
//注意 這里做了修改 pstmt=conn.prepareStatement(querystr,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

//參數賦值
for(int i=0;i<params.size();i++){
String param = params.get(i)==null?"":params.get(i).toString().trim();
pstmt.setString(i+1,param);
}

rst = pstmt.executeQuery();
rsmd = rst.getMetaData();

// 這里做了修改
rst.last();
int count = rst.getRow();
tmpAarry = new Object[count];
rst.beforeFirst();

while (rst.next()) {

Map tmpmap = new HashMap();
int j = 0;
for ( int i = 1; i <= rsmd.getColumnCount(); i++ ){
tmpmap.put(rsmd.getColumnName(i), rst.getObject(i));
}
tmpAarry[j]=tmpmap;
j++;
}

}catch(Exception e){
System.out.println("pubgetstr"+e.toString()+querystr);
}finally{
myDataUtil.free(rst,pstmt,conn);
// 返回的是個數組
return tmpAarry;
}
}

好了,這兩種方法的結構是一樣的,看是你也看到了,自己寫有多麻煩,還要考慮很多意想不到的問題,比如那個滾動結果集。所以能用java api中提供的最好用,那都是經得住考驗的,而且方便的很。

⑩ 如何將List集合轉換成String的數組

可以使用Java中的toArray()方法將List集合轉換為String數組。例如:純畝缺```Listu003cStringu003e list = new ArrayListu003cu003e();list.add("hello");list.add("world");String[] array = list.toArray(new String[list.size()]);```在上面的例子中,我們首先創建了包含字元串的List集合,並向其中添加了兩個元素"hello"和"world"。然後,我們使用toArray()方法將該List集合轉換為String數組array。需要注意的是,toArray()方法的參數是指定類型和長度的數組,它將保留List集合中的元素並將耐基其轉換為指定類型的數組,最後返回該數組。如果數組長度小於List集合的大小,則toArray()方法將做辯創建新的數組,並將其返回。
閱讀全文

與javalist轉化為數組相關的資料

熱點內容
pc桌面壁紙文件夾 瀏覽:473
微信怎麼添加群 瀏覽:781
40歲男人適合的微信名 瀏覽:925
編程里比例怎麼打 瀏覽:215
蘋果12兩個app如何分屏 瀏覽:592
ps下載完不是壓縮文件 瀏覽:362
電腦中的個人文件包括什麼 瀏覽:572
網路連接一般什麼密碼 瀏覽:199
java定時器quartz實例 瀏覽:259
稻殼excel文件太大怎麼弄 瀏覽:901
文件里的視頻如何保存到相冊 瀏覽:428
手機百度雲文件電腦 瀏覽:957
編程怎麼做到時鍾精準 瀏覽:912
錘子用過的壁紙在哪個文件里 瀏覽:468
qq網站安全性未知訪問不了怎麼辦 瀏覽:270
燕秀怎麼修改編程人名字 瀏覽:789
2012年天之眼導航升級 瀏覽:595
如何安裝視頻文件 瀏覽:315
紅米2A升級miui9 瀏覽:927
如何在表格中加入一行資料庫 瀏覽:421

友情鏈接