字符串数组的ArrayList

时间:2012-05-15 10:05:12

标签: java arrays string arraylist

下面定义的两个数据结构有什么区别?

第二个是ArrayList,其元素的类型为'String'。但是第一个数据结构是什么?

初始化也会有所不同。谁能在这里举个例子?

    ArrayList<String>[] temp1;
    ArrayList<String> temp2;

6 个答案:

答案 0 :(得分:3)

ArrayList<String>[] temp1;:这是一个包含字符串

的ArrayList数组

ArrayList<String> temp2;:这是一个包含字符串

的ArrayList

如果你想要一个字符串数组的ArrayList,你必须做ArrayList<String[]> temp3;。注意不同括号的位置。

初始化:

// create an array with 10 uninitialized ArrayList<String>
ArrayList<String>[] temp1 = new ArrayList[10];
// create empty lists that can be filled
for (int i=0; i<temp1.length; i++)
  temp1[i] = new ArrayList<String>();

// create an empty list of Strings
ArrayList<String> temp2 = new ArrayList<String>();

// create an empty list of String arrays
ArrayList<String[]> temp3 = new ArrayList<String[]>();

答案 1 :(得分:1)

我提供了一些示例来区分Array of ArrayListArrayList of String

public class ArrayOfArrayList {

    public static void main(String[] args) {
        // Declare the Array of ArrayList
        List<String>[] arrayOfList = new ArrayList[2];

        // Declare the Object of ArrayList
        for(int i = 0; i < arrayOfList.length; i++) {
            arrayOfList[i] = new ArrayList<>();
            arrayOfList[i].add("" + (i + 1));
            arrayOfList[i].add("" + (i + 2));
        }

        // Print out the result
        for(List<String> list : arrayOfList) {
            for(String str : list) {
                System.out.println(str);
            }
        }

        // Declare the Object of ArrayList
        List<String> arrayList = new ArrayList<>();
        arrayList.add("1");
        arrayList.add("2");

        // Print out the result
        for(String str : arrayList) {
            System.out.println(str);
        }
    }
}

答案 2 :(得分:0)

  

第二个是ArrayList,其元素的类型为'String'。但是第一个数据结构是什么?

从表面上看,它似乎是一个列表数组(包含字符串)。但阵列和泛型don't play very well together。来自文章:

  

数组是协变的但是泛型的另一个结果是你不能实例化泛型类型的数组(新的List&lt; String&gt; [3]是非法的),除非type参数是一个无界的通配符(new列表&lt;?&gt; [3]是合法的)。让我们看看如果允许声明泛型类型数组会发生什么:

List<String>[] lsa = new List<String>[10]; // illegal
Object[] oa = lsa;  // OK because List<String> is a subtype of Object
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[0] = li; 
String s = lsa[0].get(0); 
  

最后一行会抛出一个ClassCastException,因为你已经设法填充List&lt; Integer&gt;进入什么应该是List&lt; String&gt;。因为数组协方差会允许你破坏泛型的类型安全性,所以不允许实例化泛型类型的数组(类型参数是无界通配符的类型,比如List&lt;?&gt;)。

答案 3 :(得分:0)

第一个数据结构是包含字符串对象的ArrayLists数组

答案 4 :(得分:0)

第一个是ArrayList<String>类型的数组。第二个是ArrayList<String>(字符串的数组列表)。

在初始化方面:

ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10];
ArrayList<String> temp2 = new ArrayList<String>();

第一次初始化必须指定数组的大小(注意这不是ArrayList的大小),这是我的例子中10的来源。它当然可以是你选择的任何尺寸,10只是一个随意的例子。它也会生成一个警告,但是,如果你真的想要一个ArrayList<String>的数组,这就是AFAIK现在唯一的方法(原因在于Java中的泛型不是统一的,而是数组类型。)

答案 5 :(得分:0)

是的,首先是ArrayList的数组,并且其中包含字符串值。 第二个语句只是字符串值的数组列表。