set(集合)、 map(映射表)、 multiset(多键集合) 、multimap(多键映射表),这些容器均以RB-tree完成(是一种比较均衡的二叉树);
hash_set(散列集合)、hash_map(散列映射表)、hash_multiset(散列多键集合)、hash_multimap(散列多键映射表)是以hashtable(散列表--一种链表数组)为底层机制完成。
这些关联式容器,类似关联式数据库,每笔数据或每个元素都有一个键值(key)和一个实值(value),即所谓的Key-Value(键-值对)。当元素被插入到关联式容器中时,容器内部结构(RB-tree/hashtable)便依照其键值大小,以某种特定规则将这个元素放置于适当位置。
set,同map一样,所有元素都会根据元素的键值自动被排序,因为set/map两者的所有各种操作,都只是转而调用RB-tree的操作行为,不过,值得注意的是,两者都不允许两个元素有相同的键值。
不同的是:set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值,而map的所有元素都是pair,同时拥有实值(value)和键值(key),pair的第一个元素被视为键值,第二个元素被视为实值。
至于multiset/multimap,他们的特性及用法和set/map完全相同,唯一的差别就在于它们允许键值重复,即所有的插入操作基于RB-tree的insert_equal()而非insert_unique()。
hash_set/hash_map,两者的一切操作都是基于hashtable之上。不同的是,hash_set同set一样,同时拥有实值和键值,且实质就是键值,键值就是实值,而hash_map同map一样,每一个元素同时拥有一个实值(value)和一个键值(key),所以其使用方式,和上面的map基本相同。但由于hash_set/hash_map都是基于hashtable之上,所以不具备自动排序功能。因为hashtable没有自动排序功能。
至于hash_multiset/hash_multimap的特性与上面的multiset/multimap完全相同,唯一的差别就是它们hash_multiset/hash_multimap的底层实现机制是hashtable(而multiset/multimap,上面说了,底层实现机制是RB-tree),所以它们的元素都不会被自动排序,不过也都允许键值重复。
所以,综上,说白了,什么样的结构决定其什么样的性质,因为set/map/multiset/multimap都是基于RB-tree之上,所以有自动排序功能,而hash_set/hash_map/hash_multiset/hash_multimap都是基于hashtable之上,所以不含有自动排序功能,至于加个前缀multi_无非就是允许键值重复而已。
相关推荐
3. Guava库:Google提供的工具库,包含丰富的集合操作类和实用工具,如Multiset、Multimap等。 总结,Java集合框架为开发者提供了强大的数据管理能力。理解和熟练运用集合框架,不仅可以提升代码质量,也能在面对...
在Java中,集合框架是用于存储和操作数据的核心组件,包括接口如List、Set、Map,以及实现这些接口的类,如ArrayList、HashSet和HashMap。 描述中同样提到了"google-collect-1.0.jar.zip",这表明提供的内容是...
除了Java标准库提供的集合外,还有其他第三方库提供了额外的集合实现,例如Google Guava库,它提供了更多功能丰富的集合实现,如`Multiset`、`Multimap`等。 #### 七、练习 教程最后包含了一些练习题,帮助读者...
6. **Guava库**:Google的Guava库提供了更高级的数据结构和工具,如Multiset(多集)、Multimap(多映射)和Immutable集合,以及缓存、事件监听等功能。 7. **Apache Commons Collections**:Apache软件基金会的...
10. **枚举集**:Guava的EnumSet和EnumMap优化了对枚举类型的集合操作,相比Java标准库中的HashSet和HashMap,它们在性能上有显著优势。 Guava的这些特性使其成为许多Java项目中的首选库,它不仅丰富了Java的工具箱...
26. **Guava 库**:Google提供的扩展库,包含大量实用工具类,如Optional、Multimap、Multiset等。 27. **Apache Commons Lang**:Apache开源项目,提供了大量用于处理字符串、数组、日期等的工具类。 28. **Joda-...
3. **哈希表搜索**:Java中的HashMap和HashSet数据结构利用哈希函数快速定位元素,查找速度非常快,平均时间复杂度为O(1),但在最坏情况下仍可能是O(n)。 4. **二叉搜索树**:在Java中,可以使用TreeMap或TreeSet...