集合详解之(五)Map集合

文章目录

  • 个人主页
  • 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表达式)的展示实例 集合详解之(五)Map集合_第1张图片
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循环 集合详解之(五)Map集合_第2张图片
entry对象支持用迭代器 集合详解之(五)Map集合_第3张图片
常用方法 方法内容介绍
K getKey() 【在遍历中获取键】
V getValue() 【在遍历中获取值】
V setValue(V value) 【在遍历中修改值】

HashTable集合

Hashtable就相当于synchronized 线程安全的HashMap,可以类比“String与StringBuffer”、“ArrayList与Vector”之间的关系,但是需要注意的是,Hashtable中存储的键不能为null,而HashMap中的键可以存储null
,所以这里就不单独介绍方法啦

TreeMap集合及常用方法

构造方法 方法内容介绍
TreeMap() 【空集合·自然排序】
TreeMap(Comparator comparator) 【利用Lambda表达式实现自定义排序·】
构造方法-lambda自定义排序 --实例 集合详解之(五)Map集合_第4张图片
TreeMap(Map m) 【构造方法:继承排序规则,继承元素】
构造方法(Map集合)继承排序规则、集合元素 --实例 集合详解之(五)Map集合_第5张图片
常用方法 方法内容介绍
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表达式)的展示实例 集合详解之(五)Map集合_第6张图片
V get(Object key) 【通过键key获取Map集合中对应的值】
SortedMap headMap(K toKey) 【返回一个严格小于
headMap(K toKey)方法实例 集合详解之(五)Map集合_第7张图片
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集合中的值列变为单列集合】

你可能感兴趣的:(JavaSE系列专栏,哈希算法,散列表,java)