Mar*_*gus
5
java
我想知道数组的缺点是什么.我认为,了解数组是否是在特定情况下存储数据的最佳方式或预测执行时间非常有用.
编辑1:澄清,按照我理解的数组:
- 不是有限的,而是固定大小的存储,用作顺序数据容器,是可变的.一个或多个索引用于引用特定数据容器.
- 如果类型是原始的,则包含的数据必须是相同的类型.
- 包含的数据必须是相同的数据类型或后裔的类型,如果类型是对象(这是多态),这种类型的转换是窄到宽也称为协变转换.
- Java中的所有数组都是一维数组.
- 交换元素或使用其索引查找元素是快速操作
- 在重新创建数组时,添加/删除元素的操作很慢
- 元素类型被强制在运行时,这就是所谓的阵列具体化.
- Java数组方法在
java.util.Arrays,你甚至不包含基本的数组操作方法,如union和intersection.令人遗憾的是,guava库并不是标准Java的一部分.
- 对象数组填充了对数据实际存在的存储位置的引用.
- 数组数组称为二维数组.
- 2d数组第一个数组填充了对其他数组的引用.
- 其他数组不按顺序存储.
- 其他阵列可以在元件尺寸变化,这被称为破烂 -和交错数组.
- Java数组具有行主要顺序.
- 数组维度通常限制为255,但它与实现不同.
例外和重要说明.
- 在托管内存环境的情况下,数据元素的绝对位置可以是顺序的,但很可能不是.
- 直接使用的数组不能是线程安全的,不可变的或具有事务完整性,因此没有直接的并行方法.
- 如果你需要查找特定数据是否包含在排序数组中,你可以使用二进制搜索,这比hashset.contains慢得多,我假设使用VMMemoryManager.getIdentityHashCode,这基本上只是旧学校调制演算和碰撞可能发生的地方.
- Java 泛型只是编译器的魔力,但如果你想将Java泛型与数组一起使用,那么你就不能使用原始类型.
- 在Java 6中,Collections.sort()的作用类似于 - 在数组中转储数据和...... - 在这一点上差异是内存中的x2倍.
- 垃圾收集器真的不喜欢阵列,你通常会在老一代中结束,并且不会很快被释放.
- 在数组中输入大数据元素是个坏主意,但我不记得为什么.
在我看来,数组是存储数据的最好方法之一,而不是直接.有时候,我的脑袋似乎就像一个垃圾桶,知识不正确.这就是为什么我问这个问题的一个原因 - 确认我所知道的.