哈希表 有两种,一种是内部按值传递的哈希表,另一种是内部按引用传递的哈希表。
    什么叫哈希表,可以理解为是k-v数据库,记录k-v数据结构的表。
    注意:哈希表不管它存了多少条记录, 它增删改查都是常数时间,O(1)。但是这个固定时间比较大,他远远比数组寻址加法减法大的多的时间。

    哈希表
    这里补充一点知识:这里定义了两个new 出来的字符串变量abc3和abc4
    String abc3 = new String(“123”);
    String abc4 = new String(“123”);
    abc3 == abc4 //会发现这两个变量并不是指向同一个内存地址的变量
    abc3.hashCode 和 abc4.hashCode 却相等。然后操作map.put(abc3, “我喜欢孙梦悦”),这时候你会发现 map.containsKey(abc3) 和 map.containsKey(abc4) 都会显示true,也就是都显示存在。这是你会疑问,如果这里的key是按照变量内存地址来put的话,map.containsKey(abc4)就会显示false了,所以我们查看源码会发现,这里containsKey方法是按照key的hash来处理的,因为这里的 abc3.hashCode 和 abc4.hashCode 都相等。

    有序表
    TreeMap
    如果是用已有类作为key的时候,已有类要有compare方法重写或者已经实现了这个方法才可以。如果用自定义类作为key时候未实现比较方法 compare,就会报错。
    也就是你要用TreeMap,默认key的类型就是可以比较的,如果不可以就会报错。