Map集合
Map API


Map集合的遍历
使⽤keySet进⾏遍历
- 可以使⽤keySet()⽅法获取到集合中所有的键。
- 遍历存储了所有的键的集合,依次通过键获取值。
/**
* 1. 使⽤keySet进⾏遍历
* @param map 需要遍历的集合
*/
private static void keyset(Map<String, String> map) {
// 1. 获取存储了所有的键的集合
Set<String> keys = map.keySet();
// 2. 遍历这个Set集合
for (String key : keys) {
// 2.1. 通过键获取值
String value = map.get(key);
// 2.2. 展示⼀下键和值
System.out.println("key = " + key + ", value = " + value);
}
}
使⽤forEach⽅法
这个forEach⽅法, 并不是Iterable接⼝中的⽅法。 是Map接⼝中定义的⼀个⽅法。从功能上将, 与Iterable中的⽅法差不多。 只是在参数部分有区别。
default void forEach(BiConsumer<? super K, ? super V> action)
/**
* 2. 使⽤forEach进⾏遍历
* @param map 需要遍历的集合
*/
private static void forEach(Map<String, String> map) {
map.forEach((k, v) -> {
// k: 遍历到的每⼀个键
// v: 遍历到的每⼀个值
System.out.println("key = " + k + ", value = " + v);
});
}
使⽤EntrySet进⾏遍历
Entry<K, V>:
是Map中的内部静态接⼝, ⼀个Entry对象我们称为⼀个实体,⽤来描述集合中的每⼀个键值对。
/**
* 3. 使⽤entrySet进⾏遍历
* @param map 需要遍历的集合
*/
private static void entrySet(Map<String, String> map) {
// 1. 获取⼀个存储有所有的Entry的⼀个Set集合
Set<Map.Entry<String, String>> entries = map.entrySet();
// 2. 遍历Set集合
for (Map.Entry<String, String> entry :entries) {
// 2.1. 获取键
String key = entry.getKey();
// 2.2. 获取值
String value = entry.getValue();
// 2.3. 展示
System.out.println("key = " + key + ", value = " +value);
//通过setValue可以去修改原始map的值
//映射项(键-值对)。Map.entrySet ⽅法返回映射的 collection视图,其中的元素属于此类。
//获得映射项引⽤的唯⼀ ⽅法是通过此 collection 视图的迭代器来实现。这些 Map.Entry 对象仅
//在迭代期间有效;更正式地说,如果在迭代器返回项之后修改了底层映射,则
//某些映射项的⾏为是不确定的,除了通过 setValue 在映射项上执⾏操作之外。
//entry.setValue("hello");
}
}
HashMap(了解)
HashMap基本实现
注意:HashMap可以实现排序:因为他的底层数据结构是由数组+链表+⼆叉树共同实现的.所以可以排序.同时这样做的⽬的是提⾼数据存储的效率.
HashMap与Hashtable的区别
- HashMap是线程不安全的集合, Hashtable是线程安全的集合。
- HashMap允许出现null键值, Hashtable是不允许的。
- HashMap的⽗类是AbstractMap, Hashtable的⽗类是Dictionary。
- HashMap的Map接⼝的新的实现类, 底层算法效率优于Hashtable。
TreeMap
原理实现
与TreeSet⼀样,进⾏排列,只是TreeMap是按照键的⼤⼩实现,对于值是不管的.我们可以将TreeSet中的值理解成TreeMap中的键.
注意点
- 什么类型的数据类型可以作为key?
实现了Comparable接⼝的compareTo()⽅法
实现了Comparator接⼝的compare()⽅法 - 经常作为key的有:
String,包装类,⾃定义的实现了要求的类 - 不可以的代表:数组,ArrayList,LinkedList(如果给他们建⽴的⽐较器也可以⽐较,但是不建议使⽤)
- 元素可不可以作为key,跟元素内部的成员没有关系
其他的实现类
LinkedHashMap
:数组,ArrayList,LinkedList(如果给他们建⽴的⽐较器也可以⽐较,但是不建议使⽤)
4. 元素可不可以作为key,跟元素内部的成员没有关系
其他的实现类
LinkedHashMap
与HashMap类似的,底层多维护了⼀个链表, 记录每⼀个键的存储顺序。也就是说, 在LinkedHashMap中, 键值对的添加顺序可以得到保障。 类似于LinkedHashSet与HashSet。
本文详细介绍了Java中的Map集合,包括Map API、Map的遍历方式如keySet、forEach和EntrySet,以及HashMap和TreeMap的实现原理和区别。HashMap是线程不安全且允许null键值的,而TreeMap则根据键进行排序。还提到了LinkedHashMap,它保持插入顺序。
316

被折叠的 条评论
为什么被折叠?



