如果我查看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 []数组。
答案 0 :(得分:2)
<>
是类型参数。它们是为您指定将在该列表中存储的对象类型。您不能将原始类型用作类型参数。您只能在list,nost基元中存储对象。查看The Java Tutorials - Generics
ArrayList
是Collection
,还有其他类型的集合(例如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)
可能会有所帮助的一些事情:
ArrayList<Element>
是指ArrayList
个Element
数据类型。这意味着,列表中的每个项目都是Element
的类型(接口的Element类的实例)。标签是在Java 5中引入的,称为泛型。这是一种在数据类型的编译时兼容性时解决的机制,而不是等到你运行代码并发现你遇到某种问题(即ClassCastException)。在运行时使用泛型没有任何优势。userValues.toArray()
返回数组而不是List
。Integer
。使用Java取消装箱机制,Integer
会自动转换为原始int
。自动装箱是相反的:是将原语转换为其等价包装类的过程;在这种情况下,从int
到Integer
。ArrayList
并调用toArray()
方法并返回上面第2项中所述的等效数组。 我希望这会有所帮助。