一:Map定义
- 在Java的集合框架中,Map接口是一种存储键值对(key-value pair)的数据结构。
- Map不允许出现重复的键(key),但允许多个键映射到相同的值(value)。
- Map接口并不继承自Collection接口,而是与Collection接口并行存在,用于处理键值对映射数据。
- 常见的Map接口实现类有HashMap、LinkedHashMap、TreeMap等。
二:Map接口的实现类
- HashMap
- 基于哈希表实现,允许null键和null值。
- 不保证映射的顺序,特别是它不保证该顺序恒久不变。
- 性能通常优于Hashtable和TreeMap。
- LinkedHashMap
- 类似于HashMap,但遍历顺序是按照键值对插入到映射中的顺序(插入顺序)或最近最少使用(LRU)顺序。
- 提供了按访问顺序(访问顺序)或插入顺序(插入顺序)遍历映射的方法。
- TreeMap
- 基于红黑树实现,能够按照键的自然顺序或自定义顺序进行排序。
- 所有的元素都根据键的自然顺序(或创建TreeMap时提供的Comparator进行排序)。
- 适用于需要有序遍历的场景。
三:Map接口的主要方法
- V put(K key, V value): 将指定的值与此映射中的指定键关联(可选操作)。如果包含一个该键的映射关系,则旧值被替换。
- V get(Object key): 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回null。
- V remove(Object key): 如果存在一个键的映射关系,则从此映射中移除它(可选操作)。
- boolean containsKey(Object key): 如果此映射包含指定键的映射关系,则返回true。
- boolean containsValue(Object value): 如果此映射将一个或多个键映射到指定值,则返回true。
- int size(): 返回此映射中的键-值映射关系的数量。
- boolean isEmpty(): 如果此映射不包含键-值映射关系,则返回true。
- Set keySet(): 返回此映射中包含的键的Set视图。
- Collection values(): 返回此映射中包含的值的Collection视图。
- Set<Map.Entry<K,V>> entrySet(): 返回此映射中包含的映射关系的Set视图。
四:代码示例
package chapter8;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("apple",5);
map.put("banana",3);
map.put("orange",20);
System.out.println("获取橘子的数量:"+ map.get("orange"));
Set<String> set = map.keySet();
System.out.println("set值为:" + set);
for(String key: map.keySet()){
System.out.println("key的值为:" + key);
}
Collection<Integer> collection= map.values();
System.out.println("value的值为:" + collection );
for(Integer value : collection){
System.out.println("数量:" + value);
}
Set<Map.Entry<String ,Integer>> entries = map.entrySet();
for(Map.Entry<String ,Integer> entry :entries){
System.out.println("每一个entry集合为:" + entry);
}
map.remove("apple");
System.out.println("移除后的map为:" + map);
}
}