【问题标题】:Why are numbers hard-coded like 1<<4 in HashMap.java class [duplicate]为什么数字在 HashMap.java 类中硬编码为 1<<4 [重复]
【发布时间】:2017-11-20 06:23:50
【问题描述】:

我在this link查看HashMap.java的源代码。

我遇到了几段这样的代码:

静态最终int DEFAULT_INITIAL_CAPACITY = 1

静态最终 int MAXIMUM_CAPACITY = 1

我的问题是,如果这些值必须被硬编码,为什么不硬编码评估值而不是这些左移运算符?

【问题讨论】:

    标签: java hashmap open-source


    【解决方案1】:

    这是为了强调它们是 2 的幂,必须是 2 的幂,并且是写 2 的幂的简单方法。

    来自 Java 8 上的源代码:

    /**
     * The default initial capacity - MUST be a power of two.
     */
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
    
    /**
     * The maximum capacity, used if a higher value is implicitly specified
     * by either of the constructors with arguments.
     * MUST be a power of two <= 1<<30.
     */
    static final int MAXIMUM_CAPACITY = 1 << 30;
    

    【讨论】:

      【解决方案2】:

      任何好的编译器都会在编译时评估这些表达式,这样的表达式更易于人类阅读和理解。

      【讨论】:

        【解决方案3】:

        在这种情况下向您展示 2 的哪个幂。

        【讨论】:

          猜你喜欢
          • 2017-08-02
          • 2017-10-07
          • 1970-01-01
          • 2014-05-21
          • 1970-01-01
          • 2011-03-09
          • 2015-08-03
          • 2012-06-28
          • 1970-01-01
          相关资源
          最近更新 更多