为了记住JCF类方法,我总是试图找到一些记忆通过理解的逻辑。
除了List接口方法, ArrayList类有capacity()方法,但没有ensureCapacity(int)方法。 Vector,StringBuffer,StringBuilder同时具有。
可能存在以下逻辑:如果我们还有ensureCapacity(int)方法,则总是存在 capacity()方法,因为它允许在运行时更改容量(也覆盖给予构造函数的容量),所以我们可能对目前设定的容量感兴趣。
但ArrayList打破了这个逻辑:它有capacity(),但没有ensureCapacity(int)。虽然几乎所有其他带有capacity()(Vector,StringBuffer,StringBuilder)的类都有。
ArrayList背后是否有任何逻辑/实际原因除了上述(助记符)"规则",或者它只是一个历史/兼容性怪癖?
P.S。 this与我的问题有关。它指出,HashMap可能有像ArrayList一样的ensureCapacity(int),但它没有它,因为设计师认为它很少需要。
答案 0 :(得分:0)
为什么ArrayList没有容量()
Java中的ArrayList 是一个数组和 List 之间的交叉 - 因此它的命名方式就是它的原因。 JavaDoc here表示它是
[r] List接口的esizable-array实现
因此,它没有任何容量,这意味着它可以容纳最大数量。相反,它只是在任何给定时间中有许多项目,由
给出ArrayList.size()
ensureCapacity(int)方法只是一个辅助方法,可用于确保实例至少具有 x 个元素数 - 与检查<相同strong> size()&gt; X 强>
思考关系
你提到了类 ArrayList,Vector,StringBuffer 和 StringBuilder 。你在谈论两种不同类型的对象,这里有两种:集合,两种是字符序列。 ArrayList 和 Vector 都扩展 AbstractList ,而 StringBuffer 和 StringBuilder 不扩展任何事情(除了对象),而是实现 CharacterSequence 。这两个父母有一些共同的方法名称是你选择类的巧合,但在命名方面是有意的 - 这些方法在这些类中具有相同的行为。
您不应该认为 ArrayList 与 StringBuffer 或 Vector 与 StringBuilder 相关,因为它们不是 - 它们是完全不同的继承树。