Map集合
Map集合.png概述:
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
特点:
1. Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)
2. Map集合中的元素,key和value的数据类型可以相同,也可以不同
3. Map集合中的元素,key是不允许重复的,value是可以重复的
4. Map集合中的元素,key和value是一一对应
常用方法:
- put(K,V): 将指定的值与此映射中的指定键关联。
- get(Object key) : 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回
null
。 - size() : 回此映射中的键-值映射关系数。
- keySet(): 返回此映射中包含的键的
Set
视图。 - remove(Object key) : 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
- containsKey(Object key) : 如果此映射包含指定键的映射关系,则返回 true。
- entrySet() : 返回此映射中包含的映射关系的 Set 视图。
- isEmpty() : 如果此映射未包含键-值映射关系,则返回 true。
public class Demo_Map {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
Demo_put(map);
Demo_get(map,"胡歌");
Demo_containsKey(map,"胡歌");
Demo_size(map);
Demo_Traversing(map);
Demo_clear(map);
}
private static void Demo_clear(Map<String, String> map) {
map.clear();
}
private static void Demo_size(Map<String, String> map) {
int size = map.size();
System.out.println("该集合有"+size);
}
private static void Demo_containsKey(Map<String, String> map, String key) {
boolean b = map.containsKey(key);
if (b){
System.out.println("存在"+key);
}else {
System.out.println("不存在"+key);
}
}
private static void Demo_get(Map<String, String> map, String key) {
String s = map.get(key);
System.out.println(s);
}
private static void Demo_put(Map<String, String> map) {
map.put("胡歌","18岁");
map.put("迪丽热巴","19岁");
map.put("古力娜扎","20岁");
map.put("马儿扎哈","100岁");
System.out.println(map);
}
/**
* 遍历集合
*/
private static void Demo_Traversing(Map<String, String> map) {
System.out.println("========迭代器遍历========");
Set<String> keySet = map.keySet();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()){
String key = iterator.next();
String value = map.get(key);
System.out.println(key+":"+value);
}
System.out.println("========增强for循环遍历========");
for (String key : keySet) {
String value= map.get(key);
System.out.println(key+":"+value);
}
Set<Map.Entry<String, String>> entrySet = map.entrySet();
Iterator<Map.Entry<String, String>> iterator1 = entrySet.iterator();
while (iterator1.hasNext()){
Map.Entry<String, String> next = iterator1.next();
String key = next.getKey();
System.out.println(key);
System.out.println(next);
}
}
}
HashMap集合
概述:
基于哈希表的 Map
接口的实现。此实现提供所有可选的映射操作,并允许使用 null
值和 null
键。(除了非同步和允许使用 null 之外,HashMap
类与 Hashtable
大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 注意,此实现不是同步的
特点:
-
HashMap集合底层是哈希表:查询的速度特别的快
JDK1.8之前:数组+单向链表
JDK1.8之后:数组+单向链表|红黑树(链表的长度超过8):提高查询的速度 -
hashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致
LinkedHashMap集合
概述:
Map
接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap
的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用 m.put(k, v)
前 m.containsKey(k)
返回了 true
,则调用时会将键 k
重新插入到映射 m
中。) 注意,此实现不是同步的
特点:
- LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
- LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的
网友评论