文章目录
- 🐒个人主页
- 🏅JavaSE系列专栏
- 📖前言:
- 🎀Map集合的介绍
- 🪅如何保证键的不重复性?(equals()与hashCode()方法的联用)
- 🎀HashMap集合及常用方法
- 🎀Map.entrySet()集合及常用方法
- 🎀HashTable集合
- 🎀TreeMap集合及常用方法
🐒个人主页
🏅JavaSE系列专栏
📖前言:
本篇博客主要以介绍Map集合接口的实现类HashMap、HashTable、TreeMap的常用方法
🎀Map集合的介绍
Map集合是 键值对 -双列集合,它的雏形是离散数学中的二元有序对<k,v>,它是一种映射关系,其中的键列抽离出来就是一个Set集合,所以键·是不能重复的,但是值可以重复。
🪅如何保证键的不重复性?(equals()与hashCode()方法的联用)
🎯 equals() 的使用:(通常指内容是否相等,去重时常常可以与重写hashCode()连用,用来更高效地比较对象内容是否相等)
🍅如果没有自己的equals()方法,默认调用Object类中的equals()方法。而Object类中的equals()方法等价于 ==作用,故想要比较对象里内容是否相等时需要重写Object类中的equals()方法。
【注】
Object类中的hashCode()方法拿到的也是内存地址
🍅如果已经重写过了Object类中的equals()方法,需注意:重写equals()是对象里一个一个内容来比较的,虽然安全性高,但效率低;
而重写hashCode()是把对象所有内容计算出一个(int类型)哈希值
直接进行数值比较,虽然高效,但有安全隐患(可能不同内容的对象两个计算出来的哈希值相同–《Hash冲突》eg:“通话”~“重地”)。🎯所以去重时可以先判断对象内容计算出的哈希值是否相等,如果哈希值相等,再调用重写equals()进行最后的检验
HashMap的存储底层源码超详解
🎀HashMap集合及常用方法
HashMap集合存放数据-键值对<k,v>和HashSet存放元素一样是无序的(即不按照插入顺序排序),它是按照键的hash值来排序的。通过键可以找到值。
构造方法 | 方法内容介绍 |
---|---|
HashMap () | 📖【构造一个空的 HashMap ,默认初始容量为 16 和默认负载系数 0.75 (当然,这两个属性也可以自定义)】 |
HashMap (Map集合 m) | 📖【可以将Map集合m或Map集合的实现类m进行转化为HashMap集合】 |
常用方法 | 方法内容介绍 |
int size () | 📖【返回Map集合键值对数量】 |
boolean isEmpty () | 📖【判断Map集合是否为空】 |
void clear () | 📖【清空集合】 |
boolean containsKey (Object key) | 📖【集合中键是否包含key,返回布尔值】 |
boolean containsValue (Object value) | 📖【集合中值是否包含value,返回布尔值】 |
Set<Map.Entry<K,V>> entrySet () | 📖【返回一个entrySet集合,利用增强for循环来实现对<k,v>进行操作】 |
void forEach (lambda表达式) | 📖【对Map集合的k,v进行遍历操作】 |
以下为forEach(lambda表达式)的展示实例 | ![]() |
V get (Object key) | 📖【通过键key获取Map集合中对应的值】 |
Set keySet () | 📖【把Map集合中的键列变为Set单列集合】 |
Collection values () | 📖【把Map集合中的值列变为单列集合】 |
V put (K key, V value) | 📖【向Map集合中添加<k,v>元素】 |
void putAll (Map集合 m) | 📖【把另外一个Map集合m或Map集合的实现类m里所有<k,v>元素添加到自身Map集合中】 |
V remove (Object key) | 📖【删除Map集合中对应键key的<k,v>键值对】 |
boolean remove (Object key, Object value) | 📖【删除Map集合中的对应键值对<k,v>,返回一个布尔值】 |
boolean replace (K key, V oldValue, V newValue) | 📖【修改Map集合中的对应键值对<k,v>为<k,v1>,返回一个布尔值】 |
🎀Map.entrySet()集合及常用方法
构造方法 | 方法内容介绍 |
---|---|
Set<Map.Entry<K,V>> Map对象.entrySet () | 📖【将map对象转化为entey对象】 |
entry对象支持用增强for循环 | ![]() |
entry对象支持用迭代器 | ![]() |
常用方法 | 方法内容介绍 |
K getKey () | 📖【在遍历中获取键】 |
V getValue () | 📖【在遍历中获取值】 |
V setValue (V value) | 📖【在遍历中修改值】 |
🎀HashTable集合
Hashtable就相当于synchronized 线程安全的HashMap,可以类比“String与StringBuffer”、“ArrayList与Vector”之间的关系,但是需要注意的是,Hashtable中存储的键不能为null,而HashMap中的键可以存储null
,所以这里就不单独介绍方法啦🐒
🎀TreeMap集合及常用方法
构造方法 | 方法内容介绍 |
---|---|
TreeMap () | 📖【空集合·自然排序】 |
TreeMap (Comparator<? super K> comparator) | 📖【利用Lambda表达式实现自定义排序·】 |
构造方法-lambda自定义排序 --实例 | ![]() |
TreeMap (Map<? extends K,? extends V> m) | 📖【构造方法:继承排序规则,继承元素】 |
构造方法(Map集合)继承排序规则、集合元素 --实例 | ![]() |
常用方法 | 方法内容介绍 |
void clear () | 📖【清空集合】 |
boolean containsKey (Object key) | 📖【是否包含键key】 |
boolean containsValue (Object value) | 📖【是否包含值Value】 |
K ceilingKey (K key) | 📖【返回此集合中>=key的最小键,如果没有此元素,则返回 null 】 |
Map.Entry<K,V> ceilingEntry (K key) | 📖【返回此集合中>=key的最键值对,如果没有此元素,则返回 null 】 |
K higherKey (K key) | 📖【返回此集合中>key的最小键,如果没有此元素,则返回 null 】 |
Map.Entry<K,V> higherEntry (K key) | 📖【返回此集合中>key的最小键值对,如果没有此元素,则返回 null 】 |
Map.Entry<K,V> floorEntry (K key) | 📖【返回(最后一个元素)最大键值对】 |
Set<Map.Entry<K,V>> entrySet () | 📖【将map对象转化为entey对象】 |
Map.Entry<K,V> firstEntry () | 📖【返回(最后一个元素)最大键值对】 |
K firstKey () | 📖【返回(第一个元素)最小键】 |
Map.Entry<K,V> lastEntry () | 📖【返回(最后一个元素)最大键值对】 |
K floorKey (K key) | 📖【返回(最后一个元素)最大键】 |
void forEach (lambda表达式) | 📖【对Map集合的k,v进行遍历操作】 |
以下为forEach(lambda表达式)的展示实例 | ![]() |
V get (Object key) | 📖【通过键key获取Map集合中对应的值】 |
SortedMap<K,V> headMap (K toKey) | 📖【返回一个严格小于<toKey的部分键值对–Map集合】 |
headMap(K toKey)方法实例 | ![]() |
Set keySet () | 📖【把Map集合中的键列变为Set单列集合】 |
Map.Entry<K,V> lastEntry() | 📖【最后一个键值对】 |
V put (K key, V value) | 📖【加入键值对】 |
void putAll (Map集合 m) | 📖【把另外一个Map集合m或Map集合的实现类m里所有<k,v>元素添加到自身Map集合中】 |
V remove (Object key) | 📖【删除Map集合中对应键key的<k,v>键值对】 |
boolean replace (K key, V oldValue, V newValue) | 📖【修改Map集合中的对应键值对<k,v>为<k,v1>,返回一个布尔值】 |
int size () | 📖【集合大小】 |
Collection values () | 📖【把Map集合中的值列变为单列集合】 |