0

如何在 Java 中创建数组或列表列表?

我有:

List<Item> rows = new ArrayList<Item>();

rows.add(new Item("a"));
rows.add(new Item("b"));

...以及如何创建像上面这样的列表数组?

List<Item> lists[] = {};
lists[0] = rows;

这是我正在尝试做的事情:

public class MainActivity extends FragmentActivity {

    public static List<List<Item>> lists;
    String tabs[] = { "Tab 1", "Tab 2" };

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lists = new ArrayList<List<Item>>();

        for (int i = 0; i < tabs.length; i++)
        {
            lists.add(i, init());
        }
    }

    public List<Item> init()
    {
        List<Item> rows = new ArrayList<Item>();

        rows.add(new Item("test"));

        return rows;
    }

}

...然后我尝试使用以下方法获取该列表:

MainActivity.lists.get(0);
4

2 回答 2

4

您不应该创建泛型类型数组,因为它不是类型安全的。这是该链接的引述

参数化类型没有准确的运行时类型信息。因此,数组存储检查不起作用,因为它使用有关数组(非精确)组件类型的动态类型信息进行数组存储检查。

强调我的。

基本上,数组在运行时使用存储检查,以检查存储在其中的元素是否与实际数组的类型兼容。现在,由于类型擦除,泛型类型在运行时没有实际的类型信息,因此数组存储检查将不起作用。

例如(取自上面的链接):

Pair<Integer,Integer>[] intPairArr = new Pair<Integer,Integer>[10]; // illegal
Object[] objArr = intPairArr; 
objArr[0] = new Pair<String,String>("",""); // should fail, but would succeed

它会起作用,因为Pair<Integer, Integer>[], 实际上是Pair[]在运行时,并且会成功存储Pair<String, String>,这也是Pair在运行时的 a。

但是,一旦您尝试从数组中获取元素,这将在您的代码中进一步失败。


因此,您应该创建一个list列表:

List<List<Item>> itemList = new ArrayList<List<Item>>();
itemList.add(rows);
于 2013-08-01T15:54:11.750 回答
2

这是创建列表列表的方法

List<List<Item>> listOfList = new ArrayList<List<Item>>();
listOfList.add(new ArrayList<Item>());
listOfList.get(0).add(new Item());

和数组列表

List<Item[]> listOfArray = new ArrayList<Item[]>();
listOfArray.add(new Item[] { item1, item2});
于 2013-08-01T15:54:43.203 回答