目录
hello,小伙伴们大家好,今天分析分析集合Map的使用
Java的Map接口是一种键值对映射的数据结构,提供了一种快速查找、插入和删除元素的方法。Map接口定义了一些常用的方法,包括:
- V put(K key, V value):将指定的值与指定的键关联(可选操作)。如果此映射中以前没有该键的映射关系,则返回null。
- V get(Object key):返回指定键所对应的值。如果此映射中不存在该键的映射关系,则返回null。
- V remove(Object key):从映射中移除指定键的映射关系。如果此映射中不存在该键的映射关系,则返回null。
- boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回true。
- boolean containsValue(Object value):如果此映射包含指定值的映射关系,则返回true。
- int size():返回此映射中的键值对个数。
- Set keySet():返回此映射中包含的所有键的集合。
- Collection values():返回此映射中包含的所有值的集合。
- Set> entrySet():返回此映射中包含的所有键值对的集合。
涉及到的几种类为
类名 | 描述 |
HashMap | HashMap是Map的实现,不维护顺序 |
LinkedHashMap | LinkedHashMap是Map的实现,继承自Hash Map,按照插入顺序维护元素顺序 |
TreeMap | Tree Map是Map和Sorted Map的实现,按照升序维护元素顺序 |
Java Map示例: (泛型风格)
public class T007 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(104,"value_4");
map.put(103,"value_3");
map.put(101,"value_1");
map.put(102,"value_2");
map.entrySet().stream().forEach(System.out :: println);
System.out.println("过滤小于101的key之后:------------------------");
map.entrySet().stream().filter(e->e.getKey()>101).forEach(System.out :: println);
}
}
put方法原理
- 首先,根据键的hashCode确定存储位置。
- 如果该位置还没有元素,直接插入新的键值对。
- 如果该位置已经存在元素(发生哈希冲突),则通常会采用链表、红黑树等方式来解决冲突,具体取决于具体的Map实现。(比如HashMap使用拉链法解决哈希冲突,而TreeMap基于红黑树实现。)
- 如果存在相同的键,则新的值会覆盖旧的值。
- 在插入完成后,可能需要根据具体实现进行扩容、平衡树结构等操作,以维护Map的性能和内部结构。
Java Map 示例: (按值降序)
public class T007 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(104,"value_4");
map.put(103,"value_3");
map.put(101,"value_1");
map.put(102,"value_2");
map.entrySet().stream().forEach(System.out :: println);
System.out.println("按值降序排序之后:------------------------");
map.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).forEach(System.out :: println);
}
}
好了,常用的存储数据的方法到这里就结束了
不积跬步,无以千里