2012-11-25 131 views
1

我有一個包含從數據庫中Java:如何初始化一個固定長度的List列表?

List<String[]> x; 

回到現在,對於一些數據的String []的列表中的每個「X」我來存儲它的相對伊蘇。 (想象一下,「x」包含從「SELECT DISTINCT xColumn1,xColumn2 FROM表」返回的元素,現在對於每個元素,我必須存儲來自另一個查詢的數據)。

Ÿ的元素將被存儲在這裏:

List<List<String[]>> yElements; 

我讀過,我可以聲明固定長度的名單,但我不知道怎麼辦。這是我所做的:

yElements = Arrays.asList(new List<String[]>[x.sixe()]); 

Netbeans告訴我「通用陣列創建」錯誤。

我也想告訴你,我必須有一個固定的長度列表來存儲List列表的特定索引中的String []列表。 (如果你能告訴我如何處理數組,它會很棒!) 謝謝。

+2

看起來你會更好的與豆保持東西放在一起:'名單'和'類XandY {字符串xColumn1;字符串xColumn2; Something y;}' – Thilo

+0

@Thilo謝謝你......這是個好主意! – Immortal

回答

0

如果你希望你的列表是絕對固定的大小,你可以使用本地數組。它們可以是多維的,例如你可以有String[][] x或`String [] [] [] y'。

但是,老實說,你的方法有點混亂,從設計的角度來看並不那麼簡單。

爲什麼不像評論中提出的那樣,有一個對象同時具有兩個列(xColumn1,xColumn2),然後將Y元素放在單獨的對象中,然後可以將它與第一個對象關聯?

這樣:

class XDetails 
{ 
    String xColumn1; 
    String xColumn2; 

    YDetails relatedY; 
    ... 
} 

class YDetails 
{ 
    ... fields of Y ... 

} 

然後你就可以有一個數組或List<XDetails>

+0

這就是我所做的: 'class A { String [] xColumn; private Yelements [] yElements; } class Yelements { List yElements; } ' 現在工作就像一個魅力。謝謝! – Immortal

0

您不能使用new創建泛型類型的數組的實例。

一種替代方法是這樣的:

import java.lang.reflect.*; 
import java.util.*; 

public class Test 
{ 
    public static void main(String args[]) 
    { 
     List<String[]> x = ...; 
     List<List<String[]>> yElements = Arrays.asList(
       (List<String[]>[])Array.newInstance(List.class, x.size())); 
    } 
} 

相關問題:How to create a generic array in Java?。 (例子中有關於創建泛型類型參數的數組的一個實例......但是同樣的方法適用於這裏。)


不過,我認爲這整個問題是基於不正確的假設。

我也想告訴你,我必須有一個固定的長度列表來存儲列表列表的特定索引中的String []列表。

您不必擁有固定大小的列表。從計算的角度來看,只要不添加或刪除列表元素,您的代碼就可以在非固定大小的列表中正常工作。 (事實上​​,使用Arrays.asList來包裝一個數組不會停止其他代碼試圖添加/刪除元素...)無論如何...如果你只是使實現類型ArrayList<ArrayList<ArrayList<String>>>,那麼泛型數組創建問題消失。

此外,我懷疑使用x.size()作爲yElements的大小是不正確的。 yElements的大小可能應該由x實例的數量決定,而不是給定的x實例的大小。

+0

我「不得不」,因爲我的線程實現,是的,x.size()是正確的長度,但我不得不承認,可能我沒有那麼清楚來描述我的問題:) 順便說一句,謝謝你你的時間。您評論的第一部分非常有趣! – Immortal