Map集合

Map 接口

定义

Map<K,V> -> Mapping(绘制…的地图;提供信息)
存储是一个个的 键值对 数据(例:钥匙 与 锁),将键映射到值的对象。Map不能包含重复的键;每个键最多可以映射一个值。
Map集合的键(key)不可重复(为Set的 HashSet 与 TreeSet 提供了不可重复的键)

方法

  • keyset() :返回映射中包含的键的set视图(即返回一个 set 集合)
  • get(key):提供参数 key 获取值
  • clear():清空
  • put(K key,V value) : 通过一个 key 存储 一个 值(如果添加操作产生了替换,就会返回旧值,无替换则返回null)
  • remove(key) : 可以通过 单参key(返回key对应的值即 删除返回) 或者双参 key 与 value删除(全部匹配才能删除)
  • containsKey() : 判断是否有此键
  • containsValue() : 判断是否有此值
  • replace(key,value) : 根据键替换值,put也可以替换
  • size() : 返回键值对的数量
  • values() :返回只含有值的collection集合

HashMap

定义

  • 对象数组 + 链表(红黑树):(哈希桶默认数量16即数组长度;散列因子0.75 即当75%的桶已经有数据时,翻倍扩容;)
    数组下标 = hashCodef()返回的值 % 数组长度
    链表 = 所有数组小标相同的数据(哈希桶即数组中的一个链表:数据量大于8 时转换为红黑二叉树,小于6 时又会转换为链表)

  • hashCode():
    返回:int 值; 对象的值相同时返回的 hash 值应不同
    优点:支持散列表

  • 合理设置初始容量与散列因子可以提高性能:初始容量与散列因子 次数减少散列重建Hash的过程;散列因子 影响数据查找的效率

TreeMap & LinkedHsahMap

Tree

使用方法和 HashMap 基本一致
有自然排序(或自定义排序)的存储
当用TreeSet存储自定义的数据时 需要写出存储的排序规则Comparable 或者使用Comparator

Linked

按照输入顺序排序的链表Map程序

Map的实例

简单存储

HashMap<String,String> data = new HashMap<>();
data.put("key1","锄禾日当午");
data.put("key2","汗滴禾下土");
//打印的结果为两个key 即对应的值
for (String s:data.keySet()) {    
    System.out.println(s + "->" + data.get(s));
}

存储自定义存储对象

当自定义储存的对象为键时,不能进行更改!
原理:
对象的 Hash 值由储存的属性值计算得来,当用 HashMap 进行存储时,会根据Hash值进行散列,当属性值更改之后,hash 值产生变化,找不到原来存储的位置。

(Hash)Map 的子集及其区别

区别在于线程安全与否

HashMap

线程不安全,效率高

HashTable

线程安全,效率低

ConcurrentHashMap

采用分段锁机制,保证线程安全,效率又高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值