当前位置: 首页 > 知识库问答 >
问题:

拆分器 - 大小与子大小标志

洪楚
2023-03-14

https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html

SIZED特征值表示在遍历或拆分之前从估计大小()返回的值表示有限大小,在没有结构源修改的情况下,表示完整遍历将遇到的元素数量的精确计数。

SUBSIZE Character 值表示 trySplit() 生成的所有拆分器都将同时具有 SIZE 和 SUBSIZE。

  1. 是否存在大小标志打开但 SUBSIZE 标志关闭的情况?
  2. 是否存在 SUBSIZE 标志已打开但大小标志已关闭的情况?

共有2个答案

轩辕佑运
2023-03-14

有点晚了,但是……这也让我困惑了一段时间。我将列举我所知道的:

HashMap(如上所述),以及IntentityHashMapLinkedHashMapTreeMap

这里要注意的是,ConcurrentHashMap 不存在于列表中,因为它允许并发更新,因此它的大小实际上是调用时的大小。事实上,CHM甚至没有明显报告SIZE

还有那些与< code>Map相关的,比如< code>HashSet和< code>TreeSet,因为在内部它们仍然是映射。

然后,在这里有一个比特集是有点不期望的,BitSetSpliterator#characteristics看起来像:

    @Override
    public int characteristics() {
        // Only sized when root and not split
        return (root ? Spliterator.SIZED : 0) |
            Spliterator.ORDERED | Spliterator.DISTINCT | Spliterator.SORTED;
    }

这可能看起来很滑稽,但解释是:

// Raise the index of this spliterator to be the next set bit
// from the mid point
index = nextSetBit(mid, wordIndex(hi - 1));

因此,对于< code>BitSet,这只会发生一次,并且报告< code>SUBSIZED没有意义,因为拆分不会正好发生在中间。

相反的方法完全没有意义:报告<code>补贴的,因此没有人(就我在代码中看到的)这样做。

司徒瀚
2023-03-14

大小但不大小的拆分的典型示例是从 HashMap 创建的拆分器。它将在其内部条目数组上保持一个范围,其中一些数组条目为 null,因为容量高于实际大小。要跳过的条目的确切分布取决于所包含键的哈希代码。

因此,拆分器最初确实知道其(总)大小,但在拆分范围时,它不知道每个范围内有多少个元素。HashMap具有的元素越多,大致平衡的拆分的可能性就越高,因此这种策略是合理的,但确切的子大小尚不清楚,并且需要对数组进行迭代才能找到答案。

在没有< code > size 的情况下报告< code>SUBSIZED特征是没有意义的,而且,就我的理解,甚至是无效的。

 类似资料:
  • 我有一个子阵列: 我想将每个子数组的元素放入另一个数组中,但子数组大小的总和必须小于或等于6。所以我想得到这样的东西 我现在的代码是 我被困在这里,因为我的代码只有两个前元素。原始数组有大约1000个子数组,我的代码没有以那种形式分割它。

  • 我花了好几天的时间让Spring Boot上传文件正常工作,但就像Spring一样,你不知道这个魔法是如何发挥作用的,即使多年来使用这个框架,你也必须通过谷歌搜索大量时间才能发现问题所在,并解决问题,就像你正在经历一个迷宫一样,这是一个可维护性的噩梦。 使用Spring Boot 2.2.0。M3进行文件上传,这两对设置有什么区别?哪个是正确的? 上面的“http”是否与Spring REST控制

  • 有什么方法可以配置响应的最大标头大小吗? 我从netty框架中得到以下错误: 显然reactor为此添加了一个API,但我不知道在SpringWebFlux的WebClient中这是如何控制的。我正在使用以下版本 有什么想法吗?

  • 问题内容: 我正在尝试提出一个要求区分大小写的结果的请求。 例如在我的数据库中 该请求是 但我有3行作为结果,我只想要abcdef 我试图找到一个解决方案 但是我有这个错误: 未知归类:’Latin1_General_CS_AS’{“成功”:false,“错误”:“#1273-未知归类:’Latin1_General_CS_AS’”} 谢谢 问题答案: 感谢您的帮助,我找到了不是latin1 ut

  • 我正在尝试从构建镜像。构建后,命令报告的镜像虚拟大小为1.917 GB。我登录检查大小(),它是573 MB。我很确定这个巨大的大小通常是不可能的。这是怎么回事?如何获得正确的图像大小?更重要的是,当我推送这个存储库时,大小是1.9 GB而不是573 MB。 输出

  • 基本上,我要问的是给定一个正方形2D阵列和一个有效的补丁大小(2D子阵列的大小),我将如何做到这一点。最终,我不需要以任何方式存储子阵列,我只需要找到每个子阵列的中值并将它们存储在一个一维阵列中。中值和存储到新阵列对我来说很简单,我只是不知道如何处理原始2D阵列并正确拆分它。我已经尝试了几次,但一直出现越界错误。我有一个4x4: 我需要像这样拆分它 < code>[1,2] [3,4] [2,3]