在JAVA中应该使用哪种数组类型?为什么?

时间:2017-02-25 12:49:48

标签: java arrays

我正在学习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;

4 个答案:

答案 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,内存)引起的小开销

  • 你想使用原语,因为它足够了,你需要节省每个潜在的消耗字节。
    原始值占用较少的内存作为包装值。
    数组接受原始值。列表和集合类没有。

  • 您想掌握如何存储和检索元素“集合”的数据。 它包括有关容量增加和减少的规则。