这个size()方法有没有用例java.util.BitSet?
我的意思是 - JavaDoc明确表示它依赖于实现,它long[]以位为单位返回内部存储的大小.从它所说的,可以得出结论,你将无法设置一个索引高于size(),但不是这样,BitSet可以自动增长:
BitSet myBitSet = new BitSet();
System.out.println(myBitSet.size()); // prints "64"
myBitSet.set(768);
System.out.println(myBitSet.size()); // prints "832"
Run Code Online (Sandbox Code Playgroud)
在BitSet我生命中遇到的每一次遭遇中,我一直想使用,length()因为那个回归的逻辑大小BitSet:
BitSet myBitSet = new BitSet();
System.out.println(myBitSet.length()); // prints "0"
myBitSet.set(768);
System.out.println(myBitSet.length()); // prints "769"
Run Code Online (Sandbox Code Playgroud)
即使我在过去的6年里一直在编写Java,但这两种方法对我来说总是很困惑.我经常混合起来,并顺便用错了,因为在我的头上,我觉得BitSet作为一个聪明的Set<boolean>,我会用size().
这就像如果ArrayList已经length()返回元件的数量和size()返回底层数组的大小.
现在,size()我缺少哪种方法的用例?它有用吗?有没有人用它做任何事情?对于某些手动钻头或类似的东西来说,这可能很重要吗?
编辑(经过一些更多的研究)
我意识到BitSet是在Java 1.0中引入的,而我们使用的大多数类的Collections框架都是在Java 1.2中引入的.所以基本上在我看来,size()由于遗留原因而保留,并且没有真正的用途.新的Collection类没有这样的方法,而一些旧的(Vector例如).
我意识到 BitSet 是在 Java 1.0 中引入的,而我们使用的大多数类的 Collections 框架是在 Java 1.2 中引入的。
正确的。
所以基本上在我看来, size() 由于遗留原因而被保留,并且没有真正的用途。
是的,差不多。
另一种“大小”方法是length()为您提供设置位的最大索引。从逻辑的角度来看,length()它比size()……更有用,但length()只在 Java 1.2 中引入。
我能想到的唯一(假设)用例size()可能比length()什么时候更好:
在这种情况下,size()可以说比length()因为它是一个更便宜的电话更好。(看看源代码......)但这很微不足道。
(我想,另一个类似的用例是当您创建一个新的BitSet并根据size()现有的预分配它时BitSet。同样,差异是微不足道的。)
但你是对的兼容性。很明显,他们无法在size()不产生兼容性问题的情况下摆脱或更改其语义。所以他们大概决定不理会它。(事实上,他们甚至没有看到弃用它的必要。在 API 中使用一个不是特别有用的方法的“危害”是最小的。)