文章目录
- 个人主页
- JavaSE系列专栏
-
- 前言:
- Map集合的介绍
- 如何保证键的不重复性?(equals()与hashCode()方法的联用)
- HashMap集合及常用方法
- Map.entrySet()集合及常用方法
- HashTable集合
- TreeMap集合及常用方法
个人主页
JavaSE系列专栏
前言:
本篇博客主要以介绍Map集合接口的实现类HashMap、HashTable、TreeMap的常用方法
Map集合的介绍
Map集合是 键值对 -双列集合,它的雏形是离散数学中的二元有序对,它是一种映射关系,其中的键列抽离出来就是一个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集合存放数据-键值对和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> entrySet () |
【返回一个entrySet集合,利用增强for循环来实现对进行操作】 |
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集合中添加元素】 |
void putAll (Map集合 m) |
【把另外一个Map集合m或Map集合的实现类m里所有元素添加到自身Map集合中】 |
V remove (Object key) |
【删除Map集合中对应键key的键值对】 |
boolean remove (Object key, Object value) |
【删除Map集合中的对应键值对,返回一个布尔值】 |
boolean replace (K key, V oldValue, V newValue) |
【修改Map集合中的对应键值对为,返回一个布尔值】 |
Map.entrySet()集合及常用方法
构造方法 |
方法内容介绍 |
Set> 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 ceilingEntry (K key) |
【返回此集合中>=key的最键值对,如果没有此元素,则返回 null 】 |
K higherKey (K key) |
【返回此集合中>key的最小键,如果没有此元素,则返回 null 】 |
Map.Entry higherEntry (K key) |
【返回此集合中>key的最小键值对,如果没有此元素,则返回 null 】 |
Map.Entry floorEntry (K key) |
【返回(最后一个元素)最大键值对】 |
Set> entrySet () |
【将map对象转化为entey对象】 |
Map.Entry firstEntry () |
【返回(最后一个元素)最大键值对】 |
K firstKey () |
【返回(第一个元素)最小键】 |
Map.Entry lastEntry () |
【返回(最后一个元素)最大键值对】 |
K floorKey (K key) |
【返回(最后一个元素)最大键】 |
void forEach (lambda表达式) |
【对Map集合的k,v进行遍历操作】 |
以下为forEach(lambda表达式)的展示实例 |
|
V get (Object key) |
【通过键key获取Map集合中对应的值】 |
SortedMap headMap (K toKey) |
【返回一个严格小于
|
headMap(K toKey)方法实例 |
|
Set keySet () |
【把Map集合中的键列变为Set单列集合】 |
Map.Entry lastEntry() |
【最后一个键值对】 |
V put (K key, V value) |
【加入键值对】 |
void putAll (Map集合 m) |
【把另外一个Map集合m或Map集合的实现类m里所有元素添加到自身Map集合中】 |
V remove (Object key) |
【删除Map集合中对应键key的键值对】 |
boolean replace (K key, V oldValue, V newValue) |
【修改Map集合中的对应键值对为,返回一个布尔值】 |
int size () |
【集合大小】 |
Collection values () |
【把Map集合中的值列变为单列集合】 |