哈希值简介:是jdk根据对象的地址或者字符串或数字算出来的int类型的数值,用于散列储存这个对象时有据可依。方便正对这个对象使用java中的各种散列数据结构做存储,比如hashmap hashset 不同的对象可能又同样的hashcode的值。
哈希表储存原理:链表+二叉树,哈希桶类的元素超过8个,那么就由链表结构,转成二叉树(红黑树)结构,为了提高查询效率,当树结构的节点数少于6时,冲新转回链表结构。
(红黑数时平衡二叉数的一种,平衡二叉树时二叉数的一种)
哈希表的扩容机制:
初始化长读为:16
负载因子为0.75
阈值:长度*负载因子=16*0.75=12
扩容系数:2
大意:创建一个哈希表的初始长度为16,当储存数据大于阈值(16*0.75=12)12时,扩容哈希表的长度16*2=32。
哈希表冲突:
数组查询快,增删慢,链表寻址慢增删快。而哈希表介于二者之间,综合性能比较给力。计算方法hashcode%长度,长度越大,取模的可能性越大,离散更大,(哈希冲突的原因)有限的空间长度len,针对整个int范围的hashcode值被取模,怎么都存在哈希冲突。用链表解决哈希冲突,但是会影响查询效率。
HashMap和Hashtable的区别:
都实现了map接口,HashMap和Hashtable在线程安全性,同步及速度几乎等价。但是HashMap是非sychronizedde并且可以接收null,Java5提供ConcurrentHashMap它是HashTable的替代,比HashTable扩展性更好。二者的迭代器不同.
HashSet和HashMap
是set和map的不同,HashMap比较快,使用唯一键来获取对象。
HashMap用的很多
InnoDB和MyISAM的区别
MyISAM不支持事务处理等高级处理,强调性能,支持表锁,数据索引一起存储
InnoDB支持事务处理等高级处理,支持行锁,数据索引分开存储