在Java中,Map
是一种用于存储键值对(key-value pairs)的集合类型。它提供了一种将键映射到值的方式,其中每个键在Map
中都是唯一的。Map
接口是java.util
包中的一部分。
常用实现类:
HashMap
: 基于哈希表实现的Map
,它提供了平均时间复杂度为O(1)的插入、删除和查找操作。但它不保证元素的顺序。
TreeMap
: 基于红黑树实现的Map
,它保持元素的有序状态。它提供了基于键的排序,因此所有键对象必须实现Comparable
接口或者通过构造方法传入一个Comparator
对象。
LinkedHashMap
: 继承自HashMap
,它保持元素插入的顺序,可以按照插入顺序或者访问顺序进行迭代。
Hashtable
: 类似于HashMap
,但是它是线程安全的。不过,在大多数情况下,推荐使用ConcurrentHashMap
来代替Hashtable
。
ConcurrentHashMap
: 是HashMap
的线程安全版本,它提供了高效的并发访问。
此图源自:【韩顺平 零基础30天学会Java】图 Map_idea 无法查看map扩容 韩顺平-CSDN博客
常用方法:
put(K key, V value)
: 将指定的值与指定的键关联在一起,并放入Map
中。get(Object key)
: 返回指定键所映射的值,如果此Map
不包含该键的映射关系,则返回null
。remove(Object key)
: 删除指定键及其对应的值。containsKey(Object key)
: 判断Map
中是否包含指定的键。containsValue(Object value)
: 判断Map
中是否包含指定的值。size()
: 返回Map
中键值对的数量。isEmpty()
: 判断Map
是否为空。
常见应用:
存储配置信息:Map
可用于存储应用程序的配置信息,其中键表示配置项的名称,值表示配置项的值。这种方式使得配置信息可以轻松地被读取和修改。
Map<String, String> config = new HashMap<>();
config.put("server", "localhost");
config.put("port", "8080");
config.put("username", "admin");
config.put("password", "password");
缓存:Map
可以用作缓存,其中键表示缓存的键,值表示相应的缓存数据。使用Map
作为缓存可以快速查找和检索数据。
Map<String, Object> cache = new HashMap<>();
cache.put("user1", new User("John", 25));
cache.put("user2", new User("Alice", 30));
请求参数和响应参数的映射:在Web开发中,常常使用Map
来表示HTTP请求的参数和响应的参数。
Map<String, String> requestParams = new HashMap<>();
requestParams.put("username", "john");
requestParams.put("password", "password");Map<String, Object> responseParams = new HashMap<>();
responseParams.put("status", "success");
responseParams.put("message", "Login successful");
计数器:Map
可以用于计数器,其中键表示要计数的对象,值表示该对象出现的次数。
Map<String, Integer> counter = new HashMap<>();
String[] words = {"apple", "banana", "apple", "orange", "banana"};
for (String word : words) {
counter.put(word, counter.getOrDefault(word, 0) + 1);
}
路由表:在网络编程中,Map
可以用来存储路由表,其中键表示目的地址,值表示下一跳的地址。
Map<String, String> routingTable = new HashMap<>();
routingTable.put("192.168.0.1", "192.168.1.1");
routingTable.put("192.168.0.2", "192.168.1.2");
数据库结果集映射:在数据库操作中,Map
可以用于将数据库查询的结果集映射为键值对,便于处理和操作数据。
Map<Integer, String> studentMap = new HashMap<>();
// 将数据库查询结果映射到Map中
ResultSet resultSet = statement.executeQuery("SELECT id, name FROM students");
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
studentMap.put(id, name);
}
遍历方法:
使用entrySet()
遍历(推荐): 这种方法使用Map.entrySet()
方法返回Map
中包含的所有键值对的Set
视图,然后通过迭代这个Set
来遍历Map
。
Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("apple", 10);
map.put("banana", 20);
map.put("orange", 15);// 遍历Map
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
使用keySet()
遍历: 这种方法使用Map.keySet()
方法返回Map
中所有键的Set
视图,然后通过迭代这个Set
来遍历Map
,并通过键获取对应的值。
Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("apple", 10);
map.put("banana", 20);
map.put("orange", 15);// 遍历Map
for (String key : map.keySet()) {
System.out.println("Key: " + key + ", Value: " + map.get(key));
}
使用Java 8的forEach()
方法: 在Java 8及以上版本中,Map
接口提供了forEach()
方法,可以使用Lambda表达式来遍历Map
。
标签:Map,Java,HashMap,map,核心,key,put,new From: https://blog.csdn.net/m0_55049655/article/details/137294022Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("apple", 10);
map.put("banana", 20);
map.put("orange", 15);// 使用forEach遍历Map
map.forEach((key, value) -> System.out.println("Key: " + key + ", Value: " + value));