基本概念
java.util.Map<K,V>
集合中存取元素的基本单位是:单对元素,类型参如下:K
- 维护的键(Key)的类型,相当于目录V
- 映射值(Value)的类型,相当于内容- 该集合中key是不允许重复的,而且一个key只能对应一个value
- Map集合的主要实现类有:
HashMap
类、TreeMap
类、LinkedHashMap
类、Hashtable
类、Properties
类HashMap
类的底层是采用哈希表进行数据管理的。TreeMap
类的底层是采用红黑树进行数据管理的。LinkedHashMap
与HashMap
的不同之处在于内部维护了一个双向链表,链表中记录了元素的迭代顺序,也就是元素插入集合中的先后顺序,因此便于迭代。Hashtable
类是古老的Map实现类,与HashMap类相比属于线程安全的类,且不允许null作为key或者value的数值。Properties
类是Hashtable
类的子类,处理属性文件,key
和value
都是String
类型
Map集合是面向查询优化的数据结构, 在大数据量情况下有着优良的查询性能。
经常用于根据key检索value的业务场景。
常用的方法
方法声明 | 功能介绍 |
---|---|
V put(K key, V value) |
将Key-Value对存入Map, 若集合中已经包含该Key, 则替换该Key所对应的Value, 返回值为该Key原来所对应的Value, 若没有则返回null |
V get(Object key) |
返回与参数Key所对应的Value对象,如果不存在则返回null |
boolean containsKey(Object key) |
判断集合中是否包含指定的Key |
boolean containsValue(Object value) |
判断集合中是否包含指定的Value |
V remove(Object key) |
根据参数指定的key进行删除 |
Set keySet() |
返回此映射中包含的键的Set视图 |
Collection values() |
返回此映射中包含的值的Collection视图 |
Set<Map.Entry<K,V>> entrySet() |
返回此映射中包含的映射的Set视图 |
声明
public class MapDemo {
public static void main(String[] args) {
//1.声明Map集合
//泛型,左边不可以省略类型,右边<>可以省略
Map<String, String> m1 = new HashMap<>();
System.out.println("m1:" + m1);//{}
}
}
put()
返回放入的key对应位置是否有元素,如果有则返回value,如果没有则返回null,然后添加进去。
添加
put()
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
//1.声明Map集合
//泛型,左边不可以省略类型,右边<>可以省略
Map<String, String> m1 = new HashMap<>();
System.out.println("m1:" + m1);//{}
String put = m1.put("1", "hello");
System.out.println("原来的value值:"+ put);//null
System.out.println("m1:" + m1);//{1=hello}
put = m1.put("2", "map");
System.out.println("原来的value值:"+ put);//null
System.out.println("m1:" + m1);//{1=hello, 2=map}
put = m1.put("three", "hashMap");
System.out.println("原来的value值:"+ put);//null
System.out.println("m1:" + m1);//{1=hello, 2=map, three=hashMap}
}
}
修改
put()
- 根据key去查找对应是否存在,因为map集合里面的key是唯一的,也可以说Map集合的key是一个Set集合
//实现修改
put = m1.put("three", "Good");
System.out.println("原来的value值:"+ put);//hashMap
System.out.println("m1:" + m1);//{1=hello, 2=map, three=Good}
集合判断
containsKey()
:查找key是否存在containsValue()
:集合查找value是否存在
//集合 查找key
boolean b1 = m1.containsKey("1");
System.out.println("查找key为1的结果:" + b1); // true
b1 = m1.containsKey("11");
System.out.println("查找key为11的结果:" + b1); // false
//集合查找value
b1 = m1.containsValue("hashMap");
System.out.println("查找value为hashMap的结果:" + b1); // false
b1 = m1.containsValue("map");
System.out.println("查找value为map的结果:" + b1); // true
获取元素
- 根据前面的key查找的结果为true来进行获取,也可以直接获取
//集合根据key获取value
String str = m1.get("5");
System.out.println("str2 = " + str); // null
str = m1.get("3");
System.out.println("str2 = " + str); // map
删除元素
//集合中元素的删除操作
str = m1.remove("1");
System.out.println("被删除的value是:" + str); // hello
System.out.println("m1 = " + m1); // {2=map, 3=map, three=Good}
获取集合的所有key
- Set集合不允许有重复元素,所以返回的key的集合是一个Set集合
//获取集合的所有key 组成Set视图 并不是新的set集合
Set<String> keySet = m1.keySet();
// 遍历所有的key
for (String key : keySet) {
//根据key获取value
String value = m1.get(key);
System.out.println(key + "=" + value);
}
2=map
3=map
three=Good
获取集合的所有value
- Collection集合可以有重复元素
//获取集合的所有value 组成Collection视图 并不是新的Collection集合
Collection<String> values = m1.values();
//遍历所有的value
for (String va:values) {
System.out.println("value:" + va);
}
value:map
value:map
value:Good
获取集合每个键值对
//获取Map集合中所有的键值对并组成Set视图
Set<Map.Entry<String, String>> entries = m1.entrySet();
for (Map.Entry<String, String> en:entries) {
System.out.println(en);
}
2=map
3=map
three=Good