首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的缺点和缺点是什么?

问数组的缺点和缺点是什么?
EN

Stack Overflow用户
提问于 2010-10-03 20:29:41
回答 4查看 1.6K关注 0票数 5

我想知道数组的缺点是什么。我认为知道数组是否是在特定情况下存储数据的最佳方式,或者预测执行的时间,是非常有帮助的。

编辑1:澄清,根据我的理解,由数组:

  1. 不是有限的,而是固定大小的存储,用作顺序数据容器,它们是可变的E 211。1或更多索引用于引用(特定的数据容器)。包含的primitive.
  2. Data数据必须是相同类型的,如果该类型是包含的数据类型必须是相同的数据类型或该类型的后代,如果类型是object (这是polymorphism),)这种类型的conversion.
    1. All转换对更宽的更窄,在Java中称为协变数组,在Java中是recreated
    2. Element 1维元素或查找元素,其索引是E 247 is E 148快速E 249 operation
    3. Adding/Removing元素是E 154慢速E 255操作,as数组是recreated
    4. Element类型
    5. Element类型E 259是在运行时执行的E 160强制E 261,这称为数组是reified.
    6. Java数组方法在java.util.Arrays中,而您的方法甚至不包含基本的数组操作方法,如、union、和intersection.。令人遗憾的是,番石榴库不是标准Java.
    7. 对象数组的一部分,其中填充了引用,以指向数据实际上是
    8. 的存储位置。

​

数组的

  1. Array 被称为二维数组。
    1. 2d数组第一个数组中填充了对其他数组的引用。其他数组不存储的sequentially.
    2. Other数组可以在元素大小上有所变化,这被称为ragged-和锯齿arrays.
    3. Java数组有行主要的order.
    4. Array 维度通常被限制为255E 2106,但它与implementation.

不同。

​

  1. Exceptions和重要笔记。

代码语言:javascript
复制
1. In case of managed memory environment, the **absolute locations** of data elements **can be sequential**, but most likely are not.
2. Arrays used directly can't be **threadsafe**, **immutable** or **have transactional integrity** and because of this, there is no direct way to go **parallel**.
3. If you need to find if specific data is contained in **sorted array** you can use **binary search**, that is not much slower then **hashset.contains** what I assume uses **VMMemoryManager.getIdentityHashCode**, that is basically just old school **modulation calculus** and where **collisions can happen**. 
4. Java **generics** is just **compiler magic**, but if you want to use **Java generic** with arrays, then you can't use **primitive types**.
5. In Java 6, **Collections.sort()** works like - dump data in array and ... - at that point difference is x2 times in memory.
6. **Garbage collector** really does not like arrays, and thy usually end up in **old generation**, and wont be freed any soon. 
7. It's a bad idea to enter **big** data **elements** in arrays, but i can't remember why.

在我看来,数组是存储数据的最佳方法之一,而不是直接存储数据。有时,我的头就像一个垃圾桶,在那里知识是畸形的。这就是我问这个问题的原因之一--来证实我所知道的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-03 20:36:48

由于Java5,数组很少是存储数据的最佳方法--泛型集合几乎总是优越的:

first)

  • subtyping

  • 泛型元素(特别是通配符)带来了类型安全性和灵活性--您不仅可以使用List<T>,而且可以使用List<? extends T>和List<? super T>,而不是T[] (T[]对应于三个变体中的第二个,而非泛型的是不变的,这简单地说意味着,例如List<String>不是List<Object> )--这可以避免运行时异常,因为编译器可以检测它们并给出错误的messages
  • arrays是固定大小的,集合可以在needed
  • collections出现很多不同类型时动态地调整它们的大小。具有不同的功能,适用于不同的场景--例如链接列表、队列、映射、集合。数组通常可以由array
  • collections直接替换,但是如果您需要关联、有序、优先级、唯一值、线程安全、不可变等存储,您将很难使用一个有几种有用方法的contains
  • you来按下,例如,contains
  • you只能创建可还原类型的数组,即不能创建一个List<String>[]

。

票数 5
EN

Stack Overflow用户

发布于 2010-10-04 00:11:05

您还应该知道数组的优点,并且有几个。

基元类型的

  • 数组通常比对应包装器类型的集合占用每个元素的空间小得多。这部分是由于包装器对象的开销(取决于它们的创建方式),另一部分原因是JVM通常将布尔值、字节、字符和短裤2、4或8存储在数组中,所有类型的
  • 数组的每个数组空间开销都小于集合类型。例如,ArrayList实际上是一个包含两个字段的对象数组,
  • 数组访问和更新比等效的集合get和set操作要快一些。

现在,这些空间/性能差异通常不值得担心。(收藏的灵活性和便利性超过了它们。)然而,在一些数据密集型应用程序中,这些差异可能是显著的。

票数 4
EN

Stack Overflow用户

发布于 2010-10-03 20:39:48

可能最容易将它们与替代方案的优势进行比较:

与

添加和删除元素要方便得多。除了在末尾添加之外,大多数操作与数组一样慢(且快速)。

与

添加和删除元素要快得多,按索引获取元素的速度非常慢。

对

contains、add和remove操作要快得多。失去元素排序。

对

允许您通过索引以外的其他方法快速访问元素。失去元素排序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3851483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档