gpt4 book ai didi

java - BitSet的size()方法是什么原因?

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:34 30 4
gpt4 key购买 nike

size() 是否有用例? java.util.BitSet 上的方法类(class)?

我的意思是 - 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"

在与 BitSet 的每一次相遇中生活中有过,一直想用 length() 因为那个返回 BitSet 的逻辑大小:

BitSet myBitSet = new BitSet();
System.out.println(myBitSet.length()); // prints "0"
myBitSet.set(768);
System.out.println(myBitSet.length()); // prints "769"

尽管过去 6 年我一直在编写 Java,但这两种方法总是让我非常困惑。我经常把它们混在一起,顺便用错一个,因为在我的脑海里,我想到了BitSet。作为一个聪明人 Set<boolean>我会在哪里使用 size() .

这就像 ArrayListlength()返回元素的数量和 size()返回底层数组的大小。

现在,size() 是否有任何用例?我缺少的方法?它有什么用吗?有没有人用过它?对某些手动位操作或类似操作可能很重要?


编辑(经过更多研究)

我意识到 BitSet是在 Java 1.0 中引入的,而包含我们使用的大部分类的 Collections 框架是在 Java 1.2 中引入的。所以基本上在我看来size()由于遗留原因而保留,并且没有实际用途。新的 Collection 类没有这样的方法,而一些旧的类(例如 Vector )有。

最佳答案

I realized BitSet was introduced in Java 1.0 while the Collections framework with most of the classes we use was introduced in Java 1.2.

正确。

So basically it seems to me that size() is kept because of legacy reasons and there's no real use for it.

是的,差不多。

另一种“大小”方法是 length(),它为您提供设置位的最大索引。从逻辑的角度来看,length()size() 更有用……但是 length() 是在 Java 1.2 才引入的。

我能想到的唯一(假设的)用例 size() 可能比 length() 更好的地方是:

  • 您正在尝试为集合中的位迭代建立一个“围栏”,并且
  • 您很可能会在结束前停止迭代,并且
  • 您是否超出了最后设置的一点并不重要。

在这种情况下,size() 可以说比 length() 更好,因为它的调用成本更低。 (查看源代码...)但那是非常边缘的。

(我想,另一个类似的用例是当您创建一个新的 BitSet 并根据现有 size() 对其进行预分配时>BitSet。同样,差异很小。)

但是关于兼容性,你是对的。很明显,他们无法在不产生兼容性问题的情况下摆脱 size() 或更改其语义。所以他们大概决定不管它了。 (事实上​​ ,他们甚至没有看到弃用它的必要性。在 API 中使用不是特别有用的方法的“危害”是最小的。)

关于java - BitSet的size()方法是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16881563/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com