许多人和作者建议我们使用list而不是数组。
List <Integer> list = new ArrayList<Integer>();
list.addElement(1);
....
它背后的原因是什么?
答案 0 :(得分:14)
您通常更愿意为作业选择正确的数据结构。您需要了解手头的任务以及您拥有的所有不同选项以及它们在迭代,搜索,添加,删除和插入数据方面的比较。通常,您需要了解数据结构如何访问和操作内存,并根据您预期应用程序的使用方式选择最佳数据结构。
显然,它并不总是很明确。但是你可以理解不同数据结构的理想。
例如,纯静态,固定长度的数据,您只需迭代,无需搜索,是阵列的理想选择。在密码算法中使用这样的数组是很常见的。如果数据是静态的,而不是迭代,则需要搜索,您可能需要某种类型的树结构。如果你想快速插入,散列可能是理想的。如果数据经常发生变化,您需要一个能够有效改变其大小的结构,如列表。
当然,有许多数据结构的变体和组合旨在解决各种特定问题。之所以如此之多,是因为他们在编写高效课程时的重要性。无论如何,我的观点是,了解数据结构。了解每种情况的理想情况,然后您就可以为任何任务决定或设计合适的数据结构。
答案 1 :(得分:4)
ArrayList比Array更好 当你不知道的时候使用 推进元素数量。 ArrayList比Arrays慢。所以, 如果你需要效率尝试使用 尽可能使用数组。
答案 2 :(得分:3)
列表的大小很容易增加,您可以轻松地在列表中间添加和删除元素。使用数组无法做到这一点。你需要考虑你需要的列表。如果您认为列表不会发生很大变化,那么请改用数组。
答案 3 :(得分:1)
要记住的一件事是Java Collections类支持通用易用性优于特定场景的优化。因此,正如之前的响应者所说,你真的需要考虑如何使用它。
例如,如果您正在创建“大型”数据结构,那么ArrayList可能会变得非常低效。每次达到数组的极限时,它会在(我相信)大小的2倍时分配一个新的。因此,平均而言,ArrayList的利用率仅为75%。
一般来说,人们可以认为Java Collections是大多数时候通常都足够好的第一个近似值,当你有可测量的性能问题时,你应该准备好使用备用的,更专业的集合实现。
在你提到的情况下,你可以认为ArrayList只是处理数组的一种更方便的方法。
答案 4 :(得分:0)
编辑:
在处理原始类型的某些情况下,最好使用数组,因为在Arraylists的情况下,它涉及原语的装箱和拆箱,与处理带数组的原语相比,这可能会慢一些。
答案 5 :(得分:0)
我使用Lists,ArrayLists等主要是因为我不需要担心下一个空闲插槽的位置,或者它是否足够大,因为Sun已经为我做了这个。
答案 6 :(得分:0)
是的,将其声明为List优于ArrayList。为什么? 答案是代码解耦。
这样做的主要原因是将您的代码与接口的特定实现分离。
其余代码仅知道数据是List类型,因此您可以在list接口的不同实现之间进行切换。
假设您将其声明为ArrayList,然后意识到应该使用LinkedList,更改它并不容易,因为无法保证其余代码不会使用特定于ArrayList的方法。
但是,如果您将其声明为列表,则只需更改列表的实例,
List <Integer> list = new ArrayList<Integer>();
到
List <Integer> list = new LinkedList<Integer>();
,并且确保这将起作用,因为您已编写了遵循列表界面提供的合同的代码。