Java:如何初始化一个固定长度的List列表?

时间:2012-11-25 01:57:00

标签: java sql list fixed-length-record

我有一个String []列表,其中包含从数据库返回的一些数据

List<String[]> x;

现在每个“x”我必须存储它的相对Ys。 (想象一下,“x”包含从“SELECT DISTINCT xColumn1,xColumn2 FROM table”返回的元素,现在对于每个元素,我必须存储来自另一个查询的数据)。

Y的元素将存储在这里:

List<List<String[]>> yElements;

我读过我可以声明一个固定长度列表,但我不知道如何。这就是我所做的:

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

Netbeans告诉我“通用阵列创建”错误。

我还想告诉你,我必须有一个固定的长度列表,用于在这个列表列表的特定索引中存储一个String []列表。 (如果你能告诉我如何处理数组,它也会很棒!) 感谢。

2 个答案:

答案 0 :(得分: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包装数组不会阻止其他代码尝试添加/删除元素...)无论如何...如果你只是做实现类型{ {1}},然后通用数组创建问题就消失了。

此外,我怀疑使用ArrayList<ArrayList<ArrayList<String>>>作为x.size()的大小是不正确的。 yElements的大小可能应该取决于yElements个实例的数量,而不是给定x实例的大小。

答案 1 :(得分:0)

如果您希望列表的大小是绝对固定的,则可以使用本机阵列。它们可以是多维的,例如你可以有String[][] x或`String [] [] [] y'。

然而,老实说,从设计的角度来看,你的方法有点令人困惑,而且不那么清晰。

为什么不像注释中建议的那样,有一个对象同时具有两列(xColumn1,xColumn2),然后将Y元素放在一个单独的对象中,然后可以将它与第一个对象相关联? / p>

这样:

class XDetails
{
   String xColumn1;
   String xColumn2;

   YDetails relatedY;
   ...
}

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

}

然后你可以有一个数组或List<XDetails>