一.Map概述
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
二.Map框架
(1)key和value都是存储java对象的引用。
(2)key的特点是无需不可重复。
(3)Map集合的key与Set集合存储结构相同。
-
HashMap
底层采用哈希表这种数据结构,非线程安全。 -
Hashtable
底层也是采用哈希表,线程安全,但效率低。 -
Properties
key和value只支持string类。 -
SortedMap
无序,不可重复,会自动按照大小顺序排序。 -
TreeMap
底层数据结构是二叉树。
三.小结
集合 | 特点 |
---|---|
ArrayList | 底层是数组 |
LinkedList | 底层是双向链表 |
Vector | 底层是数组,线程安全,但效率低。 |
HashSet | 底层是HashMap,放到HashSet中的元素,相当于放到HashMap中的key部分 |
TreeSet | 底层是TreeMap,放到TreeSet中的元素,相当于放到TreeMap中的key部分 |
HashMap | 底层是哈希表 |
Hashtable | 底层也是哈希表,线程安全 |
Properties | 线程安全,只是key和value都是string |
TreeMap | 底层是二叉树,元素会自动按照大小进行排序 |
四.Map的方法
方法名 | 作用 |
---|---|
put | 添加元素 |
containsKey | 集合中是否包含了指定Key对应的映射关系 |
containsValue | 集合中是否包含了指定Value对应的映射关系 |
get | 获取指定 key 对应对 value |
isEmpty | 集合是否为空,不为空返回false,空返回true |
clear | 清空集合中所有的键值对 |
remove | 删除指定键对应的键值对 |
size | 获取键值对的数量 |
values | 返回 hashMap 中存在的所有 value 值。 |
keySet | 返回 hashMap 中所有 key 组成的集合视图。 |
entrySet | 返回 hashMap 中所有映射项的集合集合视图。 |
package com.sdnu.HashMap;
import java.util.HashMap;
/**
* @author Beyong
* @Description HashMapTest
* @date 2021/07/07 18:05
*/
public class HashMapTest {
public static void main(String[] args) {
HashMap<Integer,String> sites = new HashMap<>();
sites.put(1,"Beijing");
sites.put(2,"Tianjin");
sites.put(3,"Jinan");
sites.put(4,"Shenzhen");
System.out.println(sites);
//sites.clear();
System.out.println(sites.containsKey(5));
System.out.println(sites.containsValue("Beijing"));
System.out.println(sites.get(3));
System.out.println(sites.isEmpty());
System.out.println(sites.entrySet());
System.out.println(sites.values());
sites.remove(4);
System.out.println(sites);
}
}
五.遍历Map集合
方法一:先获取所有的key值到set中,通过遍历set,每一次都获得一个key值,通过key值得到value。
package com.sdnu.HashMap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
/**
* @author Beyong
* @Description ergodicMap
* @date 2021/07/07 20:28
*/
public class ergodicMap {
public static void main(String[] args) {
HashMap<Integer,String> sites = new HashMap<>();
sites.put(1,"Beijing");
sites.put(2,"Shanghai");
sites.put(3,"Shenzhen");
Set<Integer> keys = sites.keySet();
Iterator<Integer> it = keys.iterator();
while(it.hasNext()){
Integer key = it.next();
String value = sites.get(key);
System.out.println(key + " = " + value);
}
}
}
方法二:先通过entrySet方法获取Map.Entry<K,V>类型的对象,然后分别通过getKey()和getValue获取对象的键和值。
package com.sdnu.project1;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* @author Beyong
* @Description entry
* @date 2021/07/07 22:26
*/
public class ergodicMap2 {
public static void main(String[] args) {
HashMap<Integer,String> sites = new HashMap<>();
sites.put(1,"Beijing");
sites.put(2,"Shanghai");
sites.put(3,"Shenzhen");
Set<Map.Entry<Integer,String>> it = sites.entrySet();
Iterator<Map.Entry<Integer,String>> object = it.iterator();
while(object.hasNext()){
Map.Entry<Integer,String> node = object.next();
Integer key = node.getKey();
String value = node.getValue();
System.out.println(key + " = " + value);
}
}
}