java创建 hashtable_Hashtable 为什么不叫 HashTable?

前几天在写《HashMap 和 Hashtable 的 6 个区别》这篇文章的时候,差点把 Hashtable 写成了 HashTable,后来看源码证实了是:Hashtable,小写的 "t"able,不符合驼峰命名规则。

什么是驼峰命名规则,来看下面的关键字:

HashMap

ArrayList

ConcurrentHashMap

简单来说就是,标识符的每个单词首字母必须大写,看起来像是驼峰的形状。

当时就很好奇,Hashtable 为什么不是 HashTable 呢?作为一名初级的 Java 程序员都应该知道的基本的驼峰命名规则,为什么 JDK 代码里面还有这种不规范的命名呢?

我想大家应该都比较好奇,我特意去查了下资料,没有查到官方的说法,不过在 stackoverflow 上看到了同样的这个问题。

原贴如下:

56236009.jpg

最佳答案是:

Hashtable was created in Java v1. The consistent naming conventions for collections were established later, in Java2, when the other classes were published as part of the brand new Java Collection Framework.

Which btw made Hashtable obsolete, so it should not be used in new code.

Hope that helps.

意思就是:

Hashtable 是在 Java 1.0 的时候创建的,而集合的统一规范命名是在后来的 Java 2 开始约定的,当时其他一部分集合类的发布构成了新的集合框架。

顺便说一下,这样就使得 Hashtable 过时了,所以不应该在新代码中继续使用它。

栈长看了下,Hashtable 确实是 JDK1.0 添加的,最早的一个集合类,这样也说得过去。那为什么不在后面的 JDK 版本中修复它呢?可能是为了考虑兼容使用 JDK 老版本的系统吧。所以就将错就错封存在了 JDK,直到现在 JDK 11 了也还没有修复或者考虑删除它。

另外,关于《HashMap 和 Hashtable 的 6 个区别》,有人留言说可以使用 currenthashtable。

79250944.jpg

栈长又去证实了下,没有 currenthashtable 和 concurrenthashtable 这个类,所有 concurrent* 开头的并发类和接口都在这里了。

49796932.jpg

好了,关于 Hashtable 的迷惑就此全都解开了。

所有 Java JVM、多线程、集合、新特性等系列文章请在公众号 “Java技术栈” 后台回复关键字:java,后续也会不断更新。

有收获?转发给更多的人吧!

本文原创首发于公众号:Java技术栈(id:javastack),关注公众号在后台回复 "java" 可获取更多,转载请原样保留本信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 首先需要定义存储课程信息的类Course和存储学生信息的类Student,例如: public class Course { private String cno; // 课程编号 private String cname; // 课程名称 // 其他课程信息 // 省略getter和setter方法 } public class Student { private String sno; // 学生学号 private String sname; // 学生姓名 // 其他学生信息 // 省略getter和setter方法 } 2. 声明一个Hashtable,键为学生学号sno,值为存储选课信息的Vector<Course>,其中Course是一个存储课程信息的类,例如: Hashtable<String, Vector<Course>> stu_cour = new Hashtable<String, Vector<Course>>(); 3. 声明一个Hashtable,键为课程编号cno,值为存储选课学生信息的Vector<Student>,其中Student是一个存储学生信息的类,例如: Hashtable<String, Vector<Student>> cour_stu = new Hashtable<String, Vector<Student>>(); 4. 将学生选课信息存入stu_cour中,即将Course对象添加到对应学生的Vector中,例如: String sno = "20190101"; // 学生学号 Course course1 = new Course(); course1.setCno("1001"); // 课程编号 course1.setCname("Java程序设计"); // 课程名称 // 其他课程信息 Vector<Course> courses = new Vector<Course>(); courses.add(course1); stu_cour.put(sno, courses); 5. 将选课学生信息存入cour_stu中,即将Student对象添加到对应课程的Vector中,例如: String cno = "1001"; // 课程编号 Student student1 = new Student(); student1.setSno("20190101"); // 学生学号 student1.setSname("张三"); // 学生姓名 // 其他学生信息 Vector<Student> students = new Vector<Student>(); students.add(student1); cour_stu.put(cno, students); 6. 根据学生学号sno,在stu_cour中查找对应的选课信息,即获取对应的Vector<Course>,遍历Vector获取每个Course对象的课程名称等信息: String sno = "20190101"; // 学生学号 Vector<Course> courses = stu_cour.get(sno); if (courses != null) { for (Course course : courses) { System.out.println(course.getCname()); // 输出课程名称 } } 7. 根据课程编号cno,在cour_stu中查找对应的选课学生信息,即获取对应的Vector<Student>,遍历Vector获取每个Student对象的学生姓名等信息: String cno = "1001"; // 课程编号 Vector<Student> students = cour_stu.get(cno); if (students != null) { for (Student student : students) { System.out.println(student.getSname()); // 输出学生姓名 } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值