代码之家  ›  专栏  ›  技术社区  ›  Margus

阵列的弱点和缺点是什么?[关闭]

  •  5
  • Margus  · 技术社区  · 15 年前

    我想知道阵列的缺点是什么。我认为知道数组是在特定情况下存储数据或预测执行时间的最佳方法是非常有用的。

    编辑1: 根据我的理解,通过数组进行澄清:

    1. 不是 固定大小存储 顺序数据容器 ,即 . 1个或更多 索引 参考
      1. 同一类型 ,如果类型为 原始的 .
      2. 包含的数据必须是 后代 如果类型是object(这是 ),这种类型 转换 窄到宽 也称为 转换。
      3. 所有数组 在Java中是 一维数组 .
      4. 交换 查找元素及其索引 快速的 操作
      5. 元素是 操作,因为数组被重新创建
      6. 元素类型 强制执行 在运行时,这称为数组 具体化 .
      7. Java数组方法在 java.util.Arrays 你的甚至不包含基本的数组操作方法,比如 和 交叉
      8. 对象数组填充 参考文献 到数据实际所在的存储位置。
    2. 被称为 .
      1. 二维数组第一个数组填充 到其他数组。
      2. 其他数组不是按顺序存储的。
      3. 衣衫褴褛 -以及 锯齿形数组
      4. Java数组有 .
      5. 阵列 是典型的 ,但它因实现而异。
      1. 如果是托管内存环境,则 绝对位置 数据元素的 可以是顺序的 ,但很可能不是。
      2. 直接使用的数组不能 线程安全的 或 具有事务完整性 平行 .
      3. 如果您需要查找 排序数组 二进制搜索 ,那就慢多了 我假设的用途 VMMemoryManager.getIdentityHashCode ,这基本上就是老派 在哪里 可能会发生碰撞 .
      4. Java 仿制药 ,但如果你想用 Java通用 对于数组,则不能使用 基本类型 .
      5. 集合.sort() 就像-在数组中转储数据。。。-在这一点上,内存中的差异是x2倍。
      6. 老一代
      7. 进去不是个好主意 数据 元素 但我不记得为什么。

      在我看来,数组是存储数据的最好方法之一,只是不能直接存储。有时候,我的脑袋就像一个垃圾桶,知识是畸形的。这是我问这个问题的一个原因-为了证实我所知道的。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Péter Török    15 年前

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

    • 泛型元素(特别是使用通配符)带来了类型安全性和灵活性—您不仅可以使用 List<T> List<? extends T> 和 List<? super T> ,而不是 T[] (对应于三个变体中的第二个,而不是第一个)
    • 不变量 ,简而言之,这意味着 List<String> 不 一 List<Object> -这样可以避免很多运行时异常,因为编译器可以检测到它们并给出错误消息
    • 集合有很多不同的风格,具有不同的功能,适用于不同的场景,例如链表、队列、映射、集合。数组通常可以直接替换为 ArrayList
    • 收藏有几种有用的方法,例如。 contains
    • 只能创建 可具体化的 类型-即不能创建 List<String>[]
        2
  •  4
  •   Stephen C    15 年前

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

    • 所有类型的数组的每数组空间开销都比集合类型小。例如,ArrayList实际上是一个包含两个字段的对象数组。

    • get 和 set 操作。

    现在,这些空间/性能差异通常不值得担心。但是,在一些数据密集型应用程序中,这些差异可能非常显著。

        3
  •  3
  •   Kirk Woll    15 年前

    对比。 ArrayList<T>
    添加和删除元素更加方便。除了在最后添加,大多数操作与数组一样慢(快)。

    对比。 LinkedList<T>
    添加元素的速度非常快。

    与 HashSet<T>
    快得多 contains add ,和 remove 操作。失去元素排序。

    与 HashMap<TKey, TValue>

        4
  •  1
  •   Vivien Barousse    15 年前

    总体弱点:

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