Java Map接口详解

1、Map 概述

  1. Map与Collection并列存在。用于保存具有映射关系的数据:key-value
  2. Map 中的key 和value 都可以是任何引用类型的数据
  3. Map 中的key 用Set来存放,不允许重复,即同一个Map 对象所对应的类,须重写hashCode()和equals()方法
  4. 常用String类作为Map的“键”
  5. key 和value 之间存在单向一对一关系,即通过指定的key 总能找到唯一的、确定的value
  6. Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和Properties。
  7. HashMap 是Map 接口使用频率最高的实现类

2、Map 常用方法

  • 添加、删除、修改操作:
  • Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
  • void putAll(Map m):将m中的所有key-value对存放到当前map中
  • Object remove(Object key):移除指定key的key-value对,并返回value
  • void clear():清空当前map中的所有数据
  • 元素查询的操作:
  • Object get(Object key):获取指定key对应的value
  • boolean containsKey(Object key):是否包含指定的key
  • boolean containsValue(Object value):是否包含指定的value
  • int size():返回map中key-value对的个数
  • boolean isEmpty():判断当前map是否为空
  • boolean equals(Object obj):判断当前map和参数对象obj是否相等
  • 元视图操作的方法:
  • Set keySet():返回所有key构成的Set集合
  • Collection values():返回所有value构成的Collection集合
  • Set entrySet():返回所有key-value对构成的Set集合

3、Map的实现类之一:HashMap

3.1 HashMap的存储结构

JDK 7及以前版本:HashMap是 数组+链表 结构(即为链地址法)

JDK 8版本发布以后:HashMap是 数组+链表+红黑 树 实现。

JDK7:

JDK8:

3.2 HashMap概述

Map中的key: 无序的、不可重复的 ,使用Set存储所有的key。key所在的类要重写equals()和hashCode() (以HashMap为例)

Map中的value: 无序的、可重复的 ,使用Collection存储所有的value。value所在的类要重写equals()

一个键值对:key-value构成了一个Entry对象。

Map中的entry: 无序的、不可重复的 ,使用Set存储所有的entry

3.3 HashMap源码分析

JDK7

public class HashMap<K,V>
   extends AbstractMap<K,V>
   implements Map<K,V>, Cloneable, Serializable
{

   /**
    * The default initial capacity - MUST be a power of two.
    */
   static final int DEFAULT_INITIAL_CAPACITY = 16;

   /**
    * The maximum capacity, used if a higher value is implicitly specified
    * by either of the constructors with arguments.
    * MUST be a power of two <= 1<<30.
    */
   static final int MAXIMUM_CAPACITY = 1 << 30;

   /**
    * The load factor used when none specified in constructor.
    */
   static final float DEFAULT_LOAD_FACTOR = 0.75f;

   /**
    * The table, resized as necessary. Length MUST Always be a power of two.
    */
   transient Entry<K,V>[] table;


   /**
   * The number of key-value mappings contained in this map.
   */
   transient int size;

   /**
   * The next size value at which to resize (capacity * load factor).
   * @serial
   */
   int threshold;

   /**
   * The load factor for the hash table.
   *
   * @serial
   */
   final float loadFactor;


   /**
    * Constructs an empty <tt>HashMap</tt> with the specified initial
    * capacity and the default load factor (0.75).
    *
    * @param initialCapacity the initial cap
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值