Java复习Day8

今天复习Map:

Map 接口概述

  • 存储键值对对象集合
  • 顶级接口,非 Collection 接口子接口

HashMap

  • 使用哈希算法存储数据
  • 特性:
    • 无序性
    • key 唯一性
    • value 可重复
    • 重复 key 会覆盖之前的值
  • 默认配置:
    • 初始容量:16
    • 负载因子:0.75

常用方法

  • put(key, value):插入键值对
  • get(key):获取指定 key 的 value
  • containsKey(key):判断是否包含指定 key
  • containsValue(value):判断是否包含指定 value
  • remove(key):移除指定 key 的元素
  • remove(key, value):移除指定键值对
  • size():获取元素数量
  • isEmpty():判断是否为空
  • putAll(map):合并 map
  • replace(key, value):替换指定 key 的 value

遍历方式

Set> entries = map.entrySet();
for (Map.Entry entry : entries) {
    System.out.println(entry.getKey() + '\t' + entry.getValue());
}

LinkedHashMap

  • 继承自 HashMap
  • 特性:
    • 有序性
    • key 唯一性
    • value 可重复

TreeMap

  • 基于树结构实现
  • 特性:无论插入顺序,默认按 key 升序排列

HashTable 与 HashMap 对比

  1. 都实现 Map 接口
  2. 历史版本:
    • HashTable 基于 Dictionary 类,JDK 1.0
    • HashMap 于 JDK 1.2 引入
  3. 线程安全:
    • HashTable 线程安全
    • HashMap 非线程安全
  4. null 值处理:
    • HashMap 允许 null 作为 key 或 value
    • HashTable 不允许
  5. 初始容量:
    • HashMap:16
    • HashTable:11
    • 加载因子均为 0.75
  6. 扩容机制:
    • HashMap:capacity * 2
    • HashTable:capacity * 2 + 1
  7. 数据结构:
    • HashMap:数组 + 链表 + 红黑树(链表长度 > 8 时转换)
    • HashTable:数组 + 链表
  8. hash 计算:
    • HashTable:直接使用 key 的 hashCode 取模
    • HashMap:对 key 的 hashCode 进行二次 hash 后再取模,以获得更好的散列值,然后再对table数组长度取模

你可能感兴趣的:(java,开发语言)