2012-11-25 128 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