代码之家  ›  专栏  ›  技术社区  ›  pri

为什么数字在HashMap中硬编码为1<4。java类[重复]

  •  1
  • pri  · 技术社区  · 7 年前

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

    静态最终int DEFAULT\u INITIAL\u容量=1<&书信电报;4; // aka 16

    静态最终int最大容量=1<&书信电报;30;

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

    3 回复  |  直到 7 年前
        1
  •  2
  •   Kayaman    7 年前

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

    /**
     * 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
  •  1
  •   Roy Cai    7 年前

    任何好的编译器在编译时都会对这些表达式进行求值,而像这样的表达式更容易让人阅读和理解。

        3
  •  0
  •   ttt    7 年前

    来告诉你在这种情况下2的哪个幂。