为何Hashtable的命名不是HashTable?

Hashtable 的命名为 “Hashtable” 而不是 “HashTable” 是因为历史原因,它遵循了早期编程语言的命名习惯。当 Hashtable 在 Java 中被引入时,许多库和数据结构的命名规则没有像现代编程中那样严格遵循驼峰命名法(CamelCase)。以下是具体原因和一些历史背景:


1. 命名历史背景

  • 早期编程语言的风格Hashtable 的命名方式受到当时常见的命名习惯影响。Java 的设计者参考了早期的编程语言(如 C 和 C++),这些语言在数据结构和函数命名时,倾向于使用单个单词或连接的词语,而不是严格的驼峰命名。例如:
    • 在 C++ 标准库中,类似的数据结构被称为 hash_map(用下划线分隔),而不是 HashMap
    • 早期的命名习惯更注重拼写清晰性,而不是统一的风格。
  • 早期计算机科学术语:”Hashtable” 是计算机科学中的一个通用术语,在学术文献和数据结构书籍中经常以 “Hashtable” 拼写出现。例如,《The Art of Computer Programming》一书中,Knuth 使用了 “Hash Table” 或 “Hashtable” 这样的表述。

2. Java 1.0 的命名风格

Hashtable 是 Java 1.0(1996年)引入的集合类之一。在 Java 1.0 的早期集合框架中,命名风格并不完全统一。例如:

  • Hashtable 采用了单词连接的方式(类似于 PascalCase,但没有分割成两个单词)。
  • 其他集合类,如 VectorEnumeration,则是单词直接命名。

相比于现代的集合类(如 Java 2 引入的 HashMapArrayList),早期集合类的命名显得不够现代化。

Java 后续版本逐渐改进了命名规范。例如:

  • Java 2 的集合框架引入了 HashMapTreeMap,这些类严格遵循了驼峰命名法。
  • HashMapHashtable 的改进版本,但命名更加符合现代风格。

3. 学术上对 “Hashtable” 的使用

“Hashtable” 作为一个词汇,在学术领域中通常写作 “Hashtable” 而非 “HashTable”。在计算机科学领域,”hash table” 通常被认为是一个复合词,连在一起时写作 “Hashtable” 是常见的写法。例如:

  • Hashtable 中的 “hash” 表示哈希函数,而 “table” 表示用来存储数据的表(映射)。
  • 连写的 “Hashtable” 更符合专业术语表达的习惯。

4. 驼峰命名法的演变

驼峰命名法(CamelCase)在早期并未成为编程语言的标准。在 Java 的早期版本中,命名规范并没有明确要求使用严格的驼峰命名。随着 Java 的演化,驼峰命名逐渐成为惯例,尤其是在 Java 2 引入新集合框架后(如 HashMap, TreeSet 等)。

所以我们看到:

  • Hashtable 保留了早期风格,未作更改以保持向后兼容。
  • 后续引入的类(如 HashMap)遵循更现代的驼峰命名法。

5. 向后兼容的设计

Hashtable 是 Java 1.0 的一部分,后续 Java 版本没有对其重命名或更改,因为这样会破坏向后兼容性。Java 的设计哲学非常重视向后兼容,因此即使后来集合框架引入了 HashMapHashtable 依然保留了它的原始命名。


总结

Hashtable 的命名不是 HashTable,主要原因是:

  1. 历史命名习惯:早期计算机科学和编程语言中,”Hashtable” 是常用写法。
  2. Java 1.0 的风格:早期集合类的命名风格较为随意,未严格遵循驼峰命名法。
  3. 向后兼容:Java 后续版本保留了原始的 Hashtable 命名,没有更改以避免破坏兼容性。
  4. 学术影响:”Hashtable” 在学术领域中是一个普遍使用的术语,连写的形式很常见。

虽然现代 Java 习惯使用驼峰命名法(如 HashMap),但 Hashtable 的命名反映了早期计算机科学和 Java 历史的一部分。

发表评论

后才能评论