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
不允许空键。 - 线程安全性:三者都不是线程安全的,需要通过同步包装器或使用并发集合类来实现线程安全。