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

Mar*_*gus 5 java

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

编辑1:澄清,按照我理解的数组:

  1. 不是有限的,而是固定大小的存储,用作顺序数据容器,是可变的.一个或多个索引用于引用特定数据容器.
    1. 如果类型是原始的,则包含的数据必须是相同的类型.
    2. 包含的数据必须是相同的数据类型后裔的类型,如果类型是对象(这是多态),这种类型的转换窄到宽也称为协变转换.
    3. Java中的所有数组都是一维数组.
    4. 交换元素或使用其索引查找元素快速操作
    5. 重新创建数组时,添加/删除元素的操作很
    6. 元素类型强制在运行时,这就是所谓的阵列具体化.
    7. Java数组方法在java.util.Arrays,你甚至不包含基本的数组操作方法,如unionintersection.令人遗憾的是,guava库并不是标准Java的一部分.
    8. 对象数组填充了数据实际存在的存储位置的引用.
  2. 数组数组称为二维数组.
    1. 2d数组第一个数组填充了对其他数组的引用.
    2. 其他数组不按顺序存储.
    3. 其他阵列可以在元件尺寸变化,这被称为破烂 -和交错数组.
    4. Java数组具有行主要顺序.
    5. 数组维度通常限制为255,但它与实现不同.
  3. 例外和重要说明.

    1. 在托管内存环境的情况下,数据元素的绝对位置可以是顺序的,但很可能不是.
    2. 直接使用的数组不能是线程安全的,不可变的具有事务完整性,因此没有直接的并行方法.
    3. 如果你需要查找特定数据是否包含在排序数组中,你可以使用二进制搜索,这比hashset.contains得多,我假设使用VMMemoryManager.getIdentityHashCode,这基本上只是旧学校调制演算碰撞可能发生的地方.
    4. Java 泛型只是编译器的魔力,但如果你想将Java泛型与数组一起使用,那么你就不能使用原始类型.
    5. 在Java 6中,Collections.sort()的作用类似于 - 在数组中转储数据和...... - 在这一点上差异是内存中的x2倍.
    6. 垃圾收集器真的不喜欢阵列,你通常会在老一代中结束,并且不会很快被释放.
    7. 在数组中输入数据元素是个坏主意,但我不记得为什么.

    在我看来,数组是存储数据的最好方法之一,而不是直接.有时候,我的脑袋似乎就像一个垃圾桶,知识不正确.这就是为什么我问这个问题的一个原因 - 确认我所知道的.

Pét*_*rök 5

从Java5开始,数组很少是存储数据的最佳方式 - 泛型集合几乎总是优越的:

  • 通用元素(特别是通配符)带来的类型安全性和灵活性-你不仅可以使用List<T>,但List<? extends T>List<? super T>,而不是T[](对应于三种变体的第二,不是第一)
  • 子类型泛型是不变的,这在简短意味着例如List<String>不是一个List<Object>-这样可以节省你大量的运行时异常的,因为编译器可以检测到它们,并给错误信息
  • 数组是固定大小的,集合可以根据需要动态调整大小
  • 集合有许多不同的风格,具有不同的功能,适用于不同的场景 - 例如链表,队列,地图,集.数组通常可以直接替换ArrayList,但是如果你需要关联,有序,优先级,唯一值,线程安全,不可变等存储,你会很难用数组
  • 集合有几种有用的方法,例如 contains
  • 你只能创建可再生类型的数组- 即你不能创建一个List<String>[]