060.JAVA集合框架_Map接口及其实现类


博主的 Github 地址


1. Map 接口及其实现类

  • Map 是一种映射关系的集合, 它将键映射到值的对象.
    一个映射不能包含重复的键; 每个键最多只能映射到一个值.

  • Map 中的键值对称为 Entry. Map 是由多个 Entry 所组成的集合.

  • Map 底层可以看作是使用了两个集合分别存储键和值,
    key 集合类似于 Set 类型集合, value 集合则类似于 List 集合.

  • Map 接口提供三种 collection 视图, 允许以键集, 值集
    或键-值映射关系集的形式查看某个映射的内容.

  • 注意:
    Map 接口并没有继承 Collection 接口和 Iterable 接口,
    因此不能直接对 Map 使用 for-each 操作.

1.1. Map 中常用的方法

1.1.1. 增加
  • put(K key, V value) 方法:

    • 定义:
      V put(K key, V value)
    • 作用:
      将指定的值与此映射中的指定键关联.
    • 返回:
      以前与 key 关联的值, 如果没有针对 key 的映射关系, 则返回 null
  • putAll(Map<? extends K,? extends V> m) 方法:

    • 定义:
      void putAll(Map<? extends K,? extends V> m)
    • 作用:
      从指定映射中将所有映射关系复制到此映射中.
1.1.2. 删除
  • clear() 方法:

    • 定义:
      void clear()
    • 作用:
      此映射中移除所有映射关系. 此调用返回后, 该映射将为空
  • remove(Object key) 方法:

    • 定义:
      V remove(Object key)
    • 作用:
      如果存在一个键的映射关系, 则将其从此映射中移除
    • 返回: 以前与 key 关联的值; 如果没有, 则返回 null
1.1.3. 查询
  • get(Object key) 方法:

    • 定义:
      V get(Object key)
    • 作用:
      返回指定键所映射的值, 如果此映射不包含该键的映射关系, 则返回 null
  • size() 方法:

    • 定义:
      int size()
    • 作用:
      返回此 Map 中键值对的数量
  • containsKey(Object key)containsValue(Object value) 方法:
    作用:
    查找 Map 中是否存在指定的键或值, 存在则返回 true

1.1.4. 获取集合
  • keySet() 方法:

    • 定义:
      Set<K> keySet()
    • 作用:
      获取 Map 中所有 key 组成的 Set 集合
  • values() 方法:

    • 定义:
      Collection<V> values()
    • 作用:
      获取 Map 中所有 value 组成的集合.
      返回的是一个 Collection, 要定义泛型接收.
  • entrySet() 方法:

    • 定义:
      Set<Map.Entry<K,V>> entrySet()
    • 作用:
      将所有键值对存进一个 Set 集合中返回.

1.2. Set 和 Map 之间的关系

  • 每个 Set 的实现类底层调用的是相同算法的 Map 的实现类.

  • 它通过把 Set 的集合对象作为 Map 中的 key 进行存储,
    再用一个 Object 常量作为 value 映射到每个 key 上.

  • 因此在很多操作上, SetMap 都是相似的.


1.3. HashMap 类

  • 此类是基于哈希表的 Map 接口的实现, 底层采用哈希表算法.
  • 此实现提供所有可选的映射操作, 并允许使用 null 值和 null 键.
  • 此类不保证映射的顺序, 也不允许 key 有重复.
  • key 判断重复也需要覆盖 equal()hashCode() 方法.

1.4. TreeMap 类

  • 此类是基于红黑树的 Map 实现, 底层使用红黑树算法.
  • Map 在键值对加入时会根据 key 来进行排序, 同时 key 也不允许重复.
  • 排序也分为自然排序和定制排序两种规则.
  • 判断重复的标准也是根据排序规则返回值是否为 0 决定.

1.5. LinkedHashMap 类

  • 此类是 Map 接口的哈希表和链接列表实现, 底层采用哈希表算法和链表算法.
  • 此类会记录键值对的加入顺序.
  • 此类是 HashMap 的子类, 因此其它特点与父类相同.

1.6. Hashtable 类

  • 该类在 JAVA 集合框架提出之前, 用于表示映射关系.
  • 采用哈希表算法, 是 HashMap 的前身. 类似 VectorArrayList 的关系.
  • 该类所有方法都是 synchronized 修饰的, 因此它线程更安全但性能较低.
  • 该类已被取代, 不建议使用.

1.7. Properties 类

  • Hashtable 的子类, 并要求 keyvalue 都是 String 类型.
  • 该类有自己专门的 getset 方法对数据进行操作.
  • 该类主要用来加载资源文件, 可保存在流中或从流中加载.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值