我正在学习JAVA,并且我已经遇到过以下方法在类中使用Array。它们之间有什么区别,将来哪一种方便使用?
ArrayList<Integer> quizGrades = new ArrayList<Integer>();
quizGrades.add(95);
quizGrades.add(87);
quizGrades.add(83);
或
int[] quizGrades = new int[3];
quizGrades[0] = 95;
quizGrades[1] = 87;
quizGrades[2] = 83;
答案 0 :(得分:2)
int[] quizGrades = new int[1]
ArrayList是Collections框架中的数据结构。
如果您事先不知道阵列的大小,则需要使用arraylist。数组列表动态调整数组的大小(插入和删除操作)。
另一方面,
Log.d("--***** MAP ", "::Loading Map");
can = this;
setContentView(R.layout.activity_main);
initializeMapsFragment();
不会调整数组大小,您需要事先提供大小。删除项目也变得很麻烦,如果要删除项目,最好使用Arraylist。
这是主要区别。你可以阅读更多关于插入,删除时间访问, https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
答案 1 :(得分:0)
ArrayList
是Java Collections框架中的一个类,而int[]
是Java中的特殊数组类型。
ArrayList
由数组内部支持,允许调整数组的长度,而int[]
初始化后无法修改长度。
现在我建议您坚持使用ArrayList
,因为它更方便使用,并且Collections框架中有很大的支持来操作您的数据。
当直接访问数组中的值时,数组具有更小的内存占用和更高效的优势。毕竟,ArrayList
在内部使用数组会增加一些开销。但是在99%的情况下,这种性能损失不是业务应用程序中的问题,因为瓶颈位于其他地方(网络,数据库等)。
总结一下:作为一名初学者,您应该坚持使用ArrayList
,如果您想学习使用数组或仅限于使用它们,则只能使用数组。
答案 2 :(得分:0)
Java中的List类和原始array数据结构都是存储和访问对象集合的机制。 ArrayList类是List接口的可调整大小的数组实现,其中ArrayList内部有一个对象数组。
Java API通常具有需要对象数组或List的方法,因此Java中有一些机制可以将原始数组转换为List,反之亦然。
将原始数组转换为列表
使用Arrays.asList()
将数组转换为List。
Integer[] array = new Integer[] { 95, 87, 83 };
List<Integer> list = Arrays.asList(array);
System.out.println(list); // [95, 87, 83]
将列表转换为基本数组
如果要将List转换为Array,请使用toArray()方法。
Integer[] array2 = list.toArray(new Integer[array.size()]);
同样,如果想将原始int值转换为List,可以简单地迭代值并添加它们。
int[] array3 = new int[] { 95, 87, 83 };
List<Integer> list3 = new ArrayList<Integer>(array3.length);
for(int val : array3) {
list3.add(val);
}
System.out.println(list3); // [95, 87, 83]
List和原始数组之间的相似点和不同点
List和原始数组都有第一个索引为0的元素,第n个元素的索引为n - 1.访问索引小于0或大于n-1的元素会导致异常:<列表中的em> IndexOutOfBoundsException 或数组中的 ArrayIndexOutOfBoundsException 。
获取并设置基本数组中的元素
int grade = array[0];
array[0] = 98;
int len = array.length; // number of elements in array
grade = array[-1]; // throws ArrayIndexOutOfBoundsException
获取并设置列表
中的元素int grade = list.get(0);
list.set(0, 98);
int len = list.size(); // number of elements in list
grade = list.get(-1); // throws IndexOutOfBoundsException
除非列表是不可变的(或只读),否则您可以添加或删除它中的元素。见Collections.unmodifiableList()。要扩展/缩小基本数组,必须创建一个新数组并将旧元素从旧数组复制到新数组。
通常,原始数组和列表在语义上是等效的,但语法不同。一种形式可以转换为另一种形式。
答案 3 :(得分:0)
ArrayList
包含array
字词。这不是巧合
ArrayList
实际上是List
接口的Resizable数组实现
因此,在引擎盖下,它使用数组来表示数据。
在大多数情况下,在数组上使用ArrayList
应该受到青睐,因为它提供了非常常用的方法来操作元素的“集合”(add(), addAll(), remove(), set(),
等。 ..)你必须用数组手动执行。
除此之外,它还使开发人员可以放心它操作的元素“集合”的大小,以及当实际大小达到初始声明大小时,与“元素集合”的容量增加/减少相关的处理。 BR />
Indeeed,使用数组,大小是固定的。因此,您必须在其声明中知道并指定它,如示例所示:int[] quizGrades = new int[1];
。
此外,如果初始大小不足以存储新元素,则应该在另一个更大的数组中复制数组数据。最后,当ArrayList类增长时,它会为你做什么。
所以当使用数组时?
通常,当您需要执行非常精细的优化时 对于应用程序开发人员来说,这种需求相当罕见。
这里有一些用例:
你想要节省由ArrayList包装器(CPU,内存)引起的小开销
你想使用原语,因为它足够了,你需要节省每个潜在的消耗字节。
原始值占用较少的内存作为包装值。
数组接受原始值。列表和集合类没有。
您想掌握如何存储和检索元素“集合”的数据。 它包括有关容量增加和减少的规则。