Java 阵列的弱点和缺点是什么?

Java 阵列的弱点和缺点是什么?,java,Java,我想知道阵列的缺点是什么。我认为,为了确定数组是否是存储特定情况下的数据的最佳方式,或者预测执行时间,了解数组是非常有帮助的 编辑1:按照我理解的数组进行澄清: 不是有限的,而是固定大小的存储,用作顺序数据容器,它是可变的。一个或多个索引用于引用特定数据容器。 包含的数据必须是相同类型的,如果类型是基元 包含的数据必须是相同的数据类型或该类型的后代,如果类型是object(这是多态性),这种类型的转换是从窄到宽的转换,也称为协变转换 Java中的所有数组都是一维数组 交换元素或查找带索引的元素是

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

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

  • 不是有限的,而是固定大小的存储,用作顺序数据容器,它是可变的。一个或多个索引用于引用特定数据容器。
  • 包含的数据必须是相同类型的,如果类型是基元
  • 包含的数据必须是相同的数据类型或该类型的后代,如果类型是object(这是多态性),这种类型的转换是从窄到宽的转换,也称为协变转换
  • Java中的所有数组都是一维数组
  • 交换元素或查找带索引的元素快速操作
  • 在重新创建数组时,添加/删除元素的操作速度很慢
  • 元素类型在运行时是强制的,这称为数组是具体化的
  • Java数组方法位于
    Java.util.array
    中,甚至不包含基本的数组操作方法,如unionintersection。很遗憾,guava库不是标准Java的一部分
  • 对象数组中填充了对实际存储数据的存储位置的引用
  • 数组称为二维数组
  • 二维数组第一个数组填充了对其他数组的引用
  • 其他数组不是按顺序存储的
  • 其他数组的元素大小可能不同,这称为参差不齐的参差不齐的数组
  • Java数组具有行主顺序
  • 数组维度通常限制为255,但它因实现而异
  • 例外情况和重要注意事项

  • 在托管内存环境中,数据元素的绝对位置可以是连续的,但很可能不是
  • 直接使用的数组不能是线程安全的、不可变的或具有事务完整性的数组,因此,没有直接的并行方法
  • 如果需要查找特定数据是否包含在排序数组中,可以使用二进制搜索,这比哈希集慢不了多少。包含我假设使用的是VMMemoryManager.getIdentityHashCode,这基本上只是老派的调制演算,以及碰撞可能发生的地方
  • Java泛型只是编译器的魔法,但是如果您想将Java泛型与数组一起使用,那么就不能使用基元类型
  • 在Java6中,Collections.sort()的工作原理类似于-dump数组中的数据和…-在这一点上,内存中的差异是x2倍
  • 垃圾收集器确实不喜欢数组,并且通常会在旧一代中结束,并且不会很快被释放
  • 在数组中输入数据元素是个坏主意,但我不记得为什么了
  • 在我看来,数组是存储数据的最佳方式之一,但不是直接存储。有时,我的脑袋就像一个垃圾桶,在那里知识是畸形的。这就是我问这个问题的原因之一——为了证实我所知道的


    自Java5以来,数组很少是存储数据的最佳方式-通用集合几乎总是优越的:


    • 泛型元素(尤其是通配符)带来了类型安全性和灵活性-您不仅可以使用
      List
      ,而且可以使用
      List将它们与备选方案的优点进行比较:

      vs.
      数组列表

      添加和删除元素更加方便。除了最后添加,大多数操作都和数组一样慢(和快)

      vs.
      链接列表

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

      vs
      HashSet

      更快的
      包含
      添加
      删除
      操作。丢失元素顺序

      vs
      HashMap

      允许您通过索引以外的方式快速访问元素。失去元素顺序。

      总体弱点:

      • 固定长度。数组的长度在初始化时声明,在初始化之后不能更改
      • 数组使用
        int
        作为索引。任何数组都不能包含超过
        2^31-1个
        元素
      • 不能创建不可变数组
      • 不能创建泛型数组

      您还应该了解阵列的优势,这里有几个方面

      • 基本类型的数组通常比相应包装类型的集合占用的每个元素的空间要少得多。这部分是由于包装器对象的开销(取决于它们的创建方式),部分是由于JVM通常将布尔值、字节、字符和短字符2、4或8存储到数组中的机器字

      • 所有类型的数组的每个数组空间开销都比集合类型小