Map 随堂笔记

1、Map 的几种类型:

  • HashMap : 允许键值为空,线程不安全,多线程同时写入,会导致数据不一致;
  • HashTable : 不允许键值为空,线程安全,因此也导致了 Hashtable在写入时会比较慢;
  • LinkedHashMap : 遍历的时候建有序,就是插入顺序,是HashMap的子类;
  • TreeMap : 根据键排序,默认是按键值的升序排序,遍历的时候有按排序顺序;

2、HashMap:

  1. 根据key的hash算出值得存储位置,如果算出的值相同,就会对值key进行==或者equals的判断,如果相同,则对旧值进行替换,如果不同则拉链存储,或者以红黑树的方式存储(链表长度>=8的时候);

3、Hash算法:

  1. Object类中:public native int hashCode();这是提供的一种算法,将对象换算成一组唯一标识的数据,默认是根据对象的内存地址计算出Hash值。
  2. hash算法,将任意长度的二进制换算成较短的二进制,这个换算过程叫做hash算法;

4、Hash 表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)二直接进行访问的数据结构。也就是说它根据key值,映射到表中一个位置来存储和访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

hash碰撞就是根据key计算出来的hash值相同。