Map相关知识(整合版)

Map

概述

Map是Java集合框架中的一个借口,用于储存键值对,它提供了一种通过键(key)来快速查找值(value)的方式。Map中的键是唯一的,每个键对应一个值

主要特点

·键唯一性:Map中的每个键都是唯一的,不能重复

·键值对储存:Map存储的是键值对,每个键对应一个值

·无序性:Map不保证元素的顺序,特别是HashMap

·可变性:Map可以动态添加,删除和修改键值对

常见实现类

·HashMap:基于哈希表实现,提供常数时间的插入,删除和查找操作,不保证元素的顺序。

·TreeMap:基于红黑树实现,保证元素按照键的自然顺序或指定的比较器顺序排列。

·LinkedHashMap:基于哈希表的链表实现,保证元素按照插入顺序排列。

常用方法

·put(K key,V  value):将指定的键值对添加到Map中。

·get(Object key):根据键获取对应的值

·remove(Object key):根据删除对应的键值对

·containsKey(Object key):判断Map中是否包含指定的键

·containValue(Object value): 判断Map中是否包含指定的值

·keySet():返回Map中所有键的集合

·values():返回Map中所有值的集合

·entrySet():返回Map中所有键值对的集合

遍历Map

使用keySet()

for (K key : map.keySet()) {
    V value = map.get(key);
    System.out.println("Key: " + key + ", Value: " + value);
}

使用entrySet()

for (Map.Entry<K, V> entry : map.entrySet()) {
    K key = entry.getKey();
    V value = entry.getValue();
    System.out.println("Key: " + key + ", Value: " + value);
}

示例代码

import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("Alice", 20);
        map.put("Bob", 25);
        map.put("Charlie", 30);

        System.out.println("Map size: " + map.size());
        System.out.println("Value of 'Bob': " + map.get("Bob"));

        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
    }
}

Map常见分类——HashMap

概述

HashMap是Map是Java集合框架中的一个类,实现了Map接口。它基于哈希表(hash table)实现,提供了一种储存键值对的方式,并且允许使用空键和空值。HashMap不保证元素的顺序,特别是插入顺序,并且提供了常数时间的性能进行基本的操作,如:添加、删除和查找。

主要特点

·键值对存储:HashMap存储的是键值对,每个键对应一个值

·键唯一性:HashMap中的每一个键都是唯一的,不能重复

·无序性:HashMap不保证元素的顺序,特别是插入顺序

·常数时间性能:基本的操作(如:添加、删除和查找)具有常数时间的性能

·允许空键和空值:HashMap允许存储一个空键和多个空值。

常用方法

·put(K key,V value):将指定的键值对添加到HashMap中

·get(Object key):根据键获取对应的值

·remove(Object key):根据键删除对应的键值对

·containsKey(Object key):检查HashMap中是否含有指定的键

·containsValue(Object value):检查HashMap中是否含有指定的值

·keySet():返回HashMap中所有键的集合

·values():返回HashMap中所有值的集合

·entrySet();返回HashMap中所有键值对的集合。

遍历HashMap

使用keySet()

for(K key:hashMap.keySet()){
    V value=hashMap.get(key);
    System.out.println("Key"+key+",Value"+value);
}

使用entrySet()

for(Map.Entry<K,V>entry:hashMap.entrySet()){
    K key=entry.getKey();
    V value=entry.getValue();
    System.out.println("Key:"+key+",Value:"+value);
}

示例代码

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> hashMap = new HashMap<>();
        hashMap.put("Alice", 20);
        hashMap.put("Bob", 25);
        hashMap.put("Charlie", 30);
        hashMap.put("Alice", 21); // 覆盖之前的值

        System.out.println("HashMap size: " + hashMap.size());
        System.out.println("Value of 'Bob': " + hashMap.get("Bob"));

        for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }

        hashMap.remove("Bob");
        System.out.println("After removing 'Bob': " + hashMap);
    }
}

总结

HashMap 是 Java 中用于存储键值对的高效集合类。通过理解其基本概念、常用方法和使用场景,可以更好地利用 HashMap 来解决实际问题。在需要通过唯一标识符来查找对应数据且不关心元素顺序的场景中HashMap 是一个理想的选择。

Map常见分类——TreeMap

概述

TreeMap是Java集合框架中的一个类,实现了SortedMap接口。它基于红黑树实现,提供了一种存储键值对的方式,并且保证了键的自然顺序或者通过比较器指定的顺序。TreeMap提供了对数时间的性能进行基本的操作。如添加、删除和查找。

主要特点

·键值对存储:TreeMap存储的是键值对,每个键对应一个值。

·键唯一性:TreeMap中的每个键都是唯一的,不能重复。

·有序性:TreeMap保证元素按照键的自然顺序或者通过比较器指定顺序进行排序。

·对数时间性能:基本操作(如添加、删除和查找)具有对数时间性能。

·不允许空键:TreeMap不允许存储空键(但允许空值)

常用方法

  • put(K key, V value):将指定的键值对添加到 TreeMap 中。
  • get(Object key):根据键获取对应的值。
  • remove(Object key):根据键删除对应的键值对。
  • containsKey(Object key):检查 TreeMap 中是否包含指定的键。
  • containsValue(Object value):检查 TreeMap 中是否包含指定的值。
  • keySet():返回 TreeMap 中所有键的集合。
  • values():返回 TreeMap 中所有值的集合。
  • entrySet():返回 TreeMap 中所有键值对的集合。
  • firstKey():返回 TreeMap 中的第一个键。
  • lastKey():返回 TreeMap 中的最后一个键。

遍历TreeMap

使用keySet()

for (K key : treeMap.keySet()) {
    V value = treeMap.get(key);
    System.out.println("Key: " + key + ", Value: " + value);
}

使用entrySet()

for (K key : treeMap.keySet()) {
    V value = treeMap.get(key);
    System.out.println("Key: " + key + ", Value: " + value);
}

示例代码

import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        Map<String, Integer> treeMap = new TreeMap<>();
        treeMap.put("Alice", 20);
        treeMap.put("Bob", 25);
        treeMap.put("Charlie", 30);

        System.out.println("TreeMap size: " + treeMap.size());
        System.out.println("Value of 'Bob': " + treeMap.get("Bob"));

        for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }

        treeMap.remove("Bob");
        System.out.println("After removing 'Bob': " + treeMap);
    }
}

总结

TreeMap 是 Java 中用于存储键值对的有序集合类。通过理解其基本概念、常用方法和使用场景,可以更好地利用 TreeMap 来解决实际问题。在需要通过唯一标识符来查找对应数据且关心元素顺序的场景,TreeMap是一个理想的选择。

Map常见分类——LinkedHashMap

概述

LinkedHashMap是 Java 集合框架中的一个类,继承自 HashMap 并实现了 Map 接口。它通过维护一个双向链表来记录插入顺序或者访问顺序,从而提供了有序的键值对存储。LinkedHashMap 结合了 HashMap的快速查找特性和链表的有序性,适用于需要保持插入顺序或访问顺序的场景。

主要特点

  • 键值对存储:LinkedHashMap存储的是键值对,每个键对应一个值。
  • 键唯一性:LinkedHashMap 中的每个键都是唯一的,不能重复。
  • 有序性:LinkedHashMap 可以保持元素的插入顺序或者访问顺序。
  • 快速查找:基于HashMap实现,提供了常数时间的性能进行基本的操作,如添加、删除和查找。
  • 允许空键和空值:LinkedHashMap允许存储空键和空值。

构造方法

  • LinkedHashMap():默认构造方法,创建一个维护插入顺序的 LinkedHashMap。
  • LinkedHashMap(int initialCapacity):指定初始容量的 LinkedHashMap。
  • LinkedHashMap(int initialCapacity, float loadFactor):指定初始容量和负载因子的 LinkedHashMap。
  • LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder):指定初始容量、负载因子和顺序模式的LinkedHashMap。accessOrder 为 true 时,维护访问顺序;为 false 时,维护插入顺序。

常用方法

  • put(K key, V value):将指定的键值对添加到LinkedHashMap中。
  • get(Object key):根据键获取对应的值。
  • remove(Object key):根据键删除对应的键值对。
  • containsKey(Object key):检查 LinkedHashMap 中是否包含指定的键。
  • containsValue(Object value):检查 LinkedHashMap中是否包含指定的值。
  • keySet():返回 LinkedHashMap 中所有键的集合。
  • values():返回LinkedHashMap 中所有值的集合。
  • entrySet():返回 LinkedHashMap 中所有键值对的集合。

遍历LinkedHashMap

使用keySet()

for (K key : linkedHashMap.keySet()) {
    V value = linkedHashMap.get(key);
    System.out.println("Key: " + key + ", Value: " + value);
}

使用entrySet

for (Map.Entry<K, V> entry : linkedHashMap.entrySet()) {
    K key = entry.getKey();
    V value = entry.getValue();
    System.out.println("Key: " + key + ", Value: " + value);
}

示例代码

import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("Alice", 20);
        linkedHashMap.put("Bob", 25);
        linkedHashMap.put("Charlie", 30);

        System.out.println("LinkedHashMap size: " + linkedHashMap.size());
        System.out.println("Value of 'Bob': " + linkedHashMap.get("Bob"));

        for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }

        linkedHashMap.remove("Bob");
        System.out.println("After removing 'Bob': " + linkedHashMap);
    }
}

总结

LinkedHashMap是 Java 中用于存储键值对的有序集合类。通过理解其基本概念、常用方法和使用场景,可以更好地利用 LinkedHashMap来解决实际问题。在需要通过唯一标识符来查找对应数据且关心元素顺序的场景中,LinkedHashMap是一个理想的选择。

LinkedHashMap,TreeMap,HashMap的区别

  • 顺序性HashMap 不保证顺序,LinkedHashMap 保证插入顺序或访问顺序,TreeMap 保证键的自然顺序或自定义顺序。
  • 性能HashMap 和 LinkedHashMap 提供常数时间的性能,TreeMap 提供对数时间的性能。
  • 空键和空值HashMap 和 LinkedHashMap 允许空键和空值,TreeMap 不允许空键。
  • 线程安全性:三者都不是线程安全的,需要通过同步包装器或使用并发集合类来实现线程安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值