
一、Java语言1.1 HashMap和HashSet1.1.1 HashMap底层原理需要从数据结构、哈希算法、冲突解决三个层次来回答。1.数据结构核心组件:NodeK,V[] table:哈希桶数组,每个元素是一个链表或红黑树的头节点int threshold:扩容阈值(capacity * loadFactor)float loadFactor:负载因子,默认0.75(时间和空间的权衡)1.1.2 HashSet底层原理核心答案:HashSet底层就是基于HashMap实现的。// HashSet源码(简化)publicclassHashSetE{privatetransientHashMapE,Objectmap;privatestaticfinalObjectPRESENT=newObject();// 占位对象publicHashSet(){map=newHashMap();}publicbooleanadd(Ee){returnmap.put(e,PRESENT)==null;// value固定为PRESENT}publicbooleanremove(Objecto){returnmap.remove(o)==PRESENT;}}关键点:HashSet的"元素"就是HashMap的keyHashMap的value固定为一个静态常量PRESENT(占位对象,不存储实际数据)利用HashMap的key不重复特性,实现Set的去重功能哈希冲突怎么解决?① 链地址法(拉链法) —— 主要方案数组每个位置是一个链表(或红黑树