JavaMap是Java中经常使用的集合类之一,该类实现了Map接口,并提供了一系列可以操作键值对的方法,包括put、get、remove等。该类的使用可以方便地实现一些常见的业务逻辑,比如缓存、计数器、计算频次等。
一、JavaMap的基本概念
JavaMap是一种映射表,可以将一组键值对映射为另一组键值对。其中,每个键和值都可以是任意对象,并且一个键只能对应一个值,因此JavaMap中的键具有唯一性。
JavaMap允许使用null作为键值,但是要注意使用时必须进行空指针判断。
二、JavaMap的常用方法
1. put方法
public V put(K key, V value)
将指定的值与该映射中的指定键关联。如果该映射中已经存在该键,则用新值替换旧值,并返回旧值。否则返回null。
示例代码:
Map<String,Integer> map = new HashMap<>(); map.put("Java", 1); // 添加键值对 map.put("Python", 2); map.put("C++", 3); map.put("Java", 4); // 将Java的值更新为4
2. get方法
public V get(Object key)
返回该映射中指定键所映射的值,如果该键不在映射中,则返回null。
示例代码:
Integer val = map.get("Java"); // 获取Java键对应的值
3. remove方法
public V remove(Object key)
移除该映射中指定键所对应的键值对,并返回该键对应的值。如果该键不在映射中,则返回null。
示例代码:
Integer val = map.remove("Java"); // 移除Java键对应的键值对
4. size方法
public int size()
返回该映射中的键值对的数量。
示例代码:
int size = map.size(); // 获取键值对的数量
三、JavaMap的遍历方式
JavaMap可以通过多种方式进行遍历,包括键集遍历、值集遍历和键值对集遍历。
1. 键集遍历
Set<K> keySet = map.keySet(); // 获取所有键的Set集合 for(K key : keySet) { // 获取每个键对应的值 V val = map.get(key); // 在此进行处理 }
2. 值集遍历
Collection<V> values = map.values(); // 获取所有值的Collection集合 for (V val : values) { // 在此进行处理 }
3. 键值对集遍历
Set<Map.Entry<K,V>> entrySet = map.entrySet(); // 获取所有键值对的Set集合 for (Map.Entry<K,V> entry : entrySet) { // 获取每个键值对的Key和Value K key = entry.getKey(); V val = entry.getValue(); // 在此进行处理 }
四、JavaMap的示例代码
1. 使用JavaMap计算字符串中每个字符出现的次数
public static Map<Character,Integer> countChars(String str) { Map<Character,Integer> map = new HashMap<>(); for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); Integer count = map.get(ch); map.put(ch, count == null ? 1 : count + 1); } return map; }
2. 使用JavaMap实现缓存功能
public class Cache<K,V> { private Map<K,SoftReference<V>> cacheMap = new HashMap<>(); public V get(K key) { SoftReference<V> ref = cacheMap.get(key); V val = ref == null ? null : ref.get(); if (val == null) { val = loadFromDatabase(key); // 从数据库中加载数据 put(key, val); // 加载后放入缓存 } return val; } public void put(K key, V value) { cacheMap.put(key, new SoftReference<>(value)); } // 从数据库中加载数据的方法 private V loadFromDatabase(K key) { // some code here... } }
3. 使用JavaMap实现计数器功能
public class Counter<K> { private Map<K,Integer> countMap = new HashMap<>(); public void count(K key) { Integer count = countMap.get(key); countMap.put(key, count == null ? 1 : count + 1); } public int getCount(K key) { Integer count = countMap.get(key); return count == null ? 0 : count; } }