电话
400 9058 355
News
multimap的设计目的是支持重复key,内部基于红黑树实现但不强制key唯一,无operator[]和at(),必须用equal_range()等范围查找获取某key全部value。
因为SortedSet是单线程安全的红黑树,不支持并发修改和按索引访问,而SkipList平均O(logn)、易实现线程安全、支持随机访问且无需重平衡。
Map接口本质是键值映射的抽象契约,只定义put、get等操作规范,不提供具体实现;其核心要求是键唯一、通过键快速查值,底层结构由HashMap(哈希表,O(1))、TreeMap(红黑树,logn)等实现类决定。
多线程下不能用HashMap替代Hashtable,因其无锁设计易致扩容死循环或数据丢失;Hashtable虽线程安全但性能差;应优先选用ConcurrentHashMap。
HashMap的put方法先调用hash(key)扰动计算hash值:null键hash为0,非null键用hashCode()高16位异或低16位;再通过(n-1)&hash定位索引,要求n为2的幂;冲突时遍历链表/红黑树,满足长度8且数组64才树化;超阈值触发扩容,全量rehash;key的ha...
set插入自动去重依赖红黑树的二分查找与等价判断(非相等),要求比较函数满足严格弱序;若自定义类型仅重载operator==而未提供operator
HashSet底层基于HashMap实现,元素作为key、value为静态对象PRESENT,唯一性由hashCode()和equals()共同保证,二者必须同时重写且保持一致性。
TreeSet基于TreeMap实现,按自然顺序或Comparator排序,要求元素可比较且非null,重复元素被丢弃;排序逻辑仅依赖compareTo或compare方法,不响应toString等其他方法。
邮箱:8955556@qq.com
Q Q:8955556