如何创建(然后获取元素)列表数组/列表?

时间:2013-08-01 15:51:29

标签: java android arrays list arraylist

如何在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);

2 个答案:

答案 0 :(得分:4)

您不应该创建一个泛型类型数组,因为it's not type safe。这是该链接的引用

  

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

强调我的。

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

E.g。 (摘自上面的链接):

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

但是,一旦你尝试从数组中获取元素,那么你的代码就会失败。


因此,您应该创建列表列表

List<List<Item>> itemList = new ArrayList<List<Item>>();
itemList.add(rows);

答案 1 :(得分: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});