Map
Map接口和Collection接口下的数据的存储形式不同,在Map中的元素由Map.Entry<K, V>来存放,K和V是一种映射的关系,一个key对应一个value,key不能重复,但是value是可以重复的。
HashMap
Map接口使用频率最高的实现类
- 可以存null
- 无序
- 线程不同步
存储结构
hash表
JDK7及以前用数组和链表实现
JDK8及以后用数组链表和红黑树来实现
HashTable
线程同步的HashMap
TreeMap
用红黑树实现的map
使用前要存储的类要实现comparable接口
Map接口的基本使用
public class MapDemo {
public static void main(String[] args) {
//使用HashMap来创建Map对象
Map<Integer, Integer> map = new HashMap<>();
//向map中填充数据
map.put(1, 10);
//put方法返回key原本对应的value值,如果没有则返回null
//如果原本有对应的value则用新的value替换原本的value
System.out.println(map.put(2, 4));//返回值位null
System.out.println(map.put(1, 11));//返回值位10,10会被替换成11
//输出map
System.out.println(map);
//通过key值获取value的值
map.get(1);
//通过key值来移除对应的元素,返回值是被移除的value
map.remove(1);
//修改值
map.replace(1, 1);
}
}
Map的遍历
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapForDemo {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < 10; i ++ ) {
map.put(i, i * i);
}
//先获取key的set再通过key来遍历
Set<Integer> keySet = map.keySet();
for (Integer key : keySet) {
System.out.println(map.get(key));
}
//把map中的键值对转化为set再遍历
Set<Map.Entry<Integer, Integer>> entrySet = map.entrySet();
for (Map.Entry<Integer, Integer> entry : entrySet) {
System.out.println(entry.getKey() + "->" + entry.getValue());
}
}
}