明确说什么是ArrayList以及如何使用它?

时间:2014-11-03 22:12:32

标签: java arrays arraylist

如果我查看ArrayList是什么以及如何使用它我常常感到困惑。当我看到这个例子时,我感到害怕:

new ArrayList<Element>(Arrays.asList(array))

作为初学者,我对ArrayLists的理解可能有些差距。例如:<>代表什么?它有特殊意义吗?它是如何在内部代表的? (例如:我将变量视为代表内存中的一个位置,将数组变量视为内存中的起始位置,将数组的索引视为表示从此起始位置开始多远的一种方式。)

我认为我需要一个ArrayList的示例: (我试图创建一个用户输入的整数数组。用户输入一次是一个整数,结束条件是用户输入零endSign = 0时。)由于Java在创建数据后不允许重新调整数组大小,因此我搜索了一个创建动态长度数组的解决方案。如果我将其转换为最后的数组,如果我理解正确的话,ArrayList似乎是一个选项吗?如果是这种情况,那么在这里使用ArrayList可能会有用:

    private int[] userInput(int endSign){ //end-sign is 0 in this case
    int validInputCounter=0;
    List<int> userValues;
    int value;
    do{
        value = readInt(); //reads integer user-input
        if(value != endSign){ 
            validInputCounter++;
            userValues += value;  
        }else{
        break;
        }
    }while(true);
    return userValues;  
}

在这段代码中,我想返回一个用户放入的int []数组。

3 个答案:

答案 0 :(得分:2)

<>类型参数。它们是为您指定将在该列表中存储的对象类型。您不能将原始类型用作类型参数。您只能在list,nost基元中存储对象。查看The Java Tutorials - Generics

ArrayListCollection,还有其他类型的集合(例如LinkedList和一些同步集合。您可以在The Java Tutorials - Collections处阅读有关集合的内容。您可以单独查看每个单元以查看它们的优势。还有Maps,你应该注意。它们的大小也会动态增长,但它们不存储单个对象,而是存储键/对值。

你有正确的主意:数组不会改变大小。 <{1}}在需要时会动态增长。

正在使用的ArrayList示例:

List

我建议阅读The Java Tutorials - Autoboxing and Unboxing,因为你不能使用原始类型作为类型参数。我们添加到intList的原语1将被装入一个对象,因为该列表需要class Demo { public static void main(String[] args) { ArrayList<Integer> intList = new ArrayList<>(); ArrayList<String> stringList = new ArrayList<>(); intList.add(1); intList.add("s"); //error stringList.add("s"); stringList.add(2); //error } } 个对象。

答案 1 :(得分:1)

您是否尝试过在线Java教程?您在这里有一些与集合和泛型相关的不同问题(&lt;&gt;语法),因此请先查看此处:http://docs.oracle.com/javase/tutorial/

具体来说, 对于收藏集:http://docs.oracle.com/javase/tutorial/collections/index.html 对于泛型:http://docs.oracle.com/javase/tutorial/extra/generics/index.html

答案 2 :(得分:1)

可能会有所帮助的一些事情:

  1. ArrayList<Element>是指ArrayListElement数据类型。这意味着,列表中的每个项目都是Element的类型(接口的Element类的实例)。标签是在Java 5中引入的,称为泛型。这是一种在数据类型的编译时兼容性时解决的机制,而不是等到你运行代码并发现你遇到某种问题(即ClassCastException)。在运行时使用泛型没有任何优势。
  2. 您可以使用userValues.toArray()返回数组而不是List
  3. 不允许使用一个整数列表。您必须使用包装类Integer。使用Java取消装箱机制,Integer会自动转换为原始int。自动装箱是相反的:是将原语转换为其等价包装类的过程;在这种情况下,从intInteger
  4. 是的,如果您不确定阵列的大小,可以使用ArrayList并调用toArray()方法并返回上面第2项中所述的等效数组。
  5. 我希望这会有所帮助。