Map集合概述和使用
- Map集合是一种双列集合,每个元素包含两个数据。
- Map集合的每个元素的格式:key=value(键值对元素)。
- Map集合也被称为“键值对集合”。
Map集合整体格式:
- Collection集合的格式:[元素1,元素2,元素3..]
- Map集合的完整格式:{key1=value1 , key2=value2 , key3=value3 , ...}
使用场景:Map集合非常适合做类购物车这样的业务场景。
Map集合体系特点
- Map集合的特点都是由键决定的。
- Map集合的键是无序,不重复的,无索引的,值不做要求(可以重复)。
- Map集合后面重复的键对应的值会覆盖前面重复键的值。
- Map集合的键值对都可以为null。
import java.util.HashMap; import java.util.linkedHashMap; import java.util.Map; public class MapDemo { public static void main(String[] args) { // Mapmaps = new HashMap<>(); Map maps = new linkedHashMap<>(); maps.put("鸿星尔克",3); maps.put("java",100); maps.put("mysql",44); maps.put("html",100); maps.put("java",1); maps.put(null,null); // System.out.println(maps);//HashMap {null=null, java=1, mysql=44, html=100, 鸿星尔克=3} System.out.println(maps);//linkedHashMap {鸿星尔克=3, java=1, mysql=44, html=100, null=null} } }
Map集合实现类特点
- HashMap:元素按照键是无序,不重复,无索引,值不做要求。(与Map体系一致)
- linkedHashMap:元素按照键是有序,不重复,无索引,值不做要求。
- TreeMap:元素按照键是有序,不重复,无索引的,值不做要求。
Map集合常用API
方法名称
说明
V put(K key,V value)
添加元素
V remove(Object key)
根据键删除键值对元素
void clear()
移除所有的键值对元素
boolean containsKey(Object key)
判断集合是否包含指定的键
boolean containsValue(Object value)
判断集合是否包含指定的值
boolean isEmpty()
判断集合是否为空
int size()
集合的长度,也就是集合中键值对的个数
import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDemo2 { public static void main(String[] args) { // 1.添加元素:无序,不重复,无索引。 Mapmaps = new HashMap<>(); maps.put("iphoneX",10); maps.put("娃娃",20); maps.put("iphoneX",100); // Hap集合后面重复的键对应的元素会覆盖前面重复的整个元素! maps.put( "huawei" ,100); maps.put("生活用品",10); maps.put("手表",10); System.out.println(maps);//{huawei=100, 手表=10, 生活用品=10, iphoneX=100, 娃娃=20} //2、清空集合 // maps.clear(); // System.out.println(maps); //{} //3、判断集合是否为空,为空返回true,反之! System.out.println(maps.isEmpty()); //4、根据键获取对应的值 Integer key = maps.get("huawei"); System.out.println(key); //100 System.out.println(maps.get("生活用品")); //10 System.out.println(maps.get("生活用品2")); //null //5、根据键删除整个元素。(删除键会返回键的值) System.out.println(maps.remove("iphoneX")); System.out.println(maps); //6、判断是否包含某个键,包含返回true,反之! System.out.println(maps.containsKey("娃娃"));//true System.out.println(maps.containsKey("娃娃2"));//false System.out.println(maps.containsKey("iphoneX"));//false 因为前面删掉了 //7、判断是否包含某个值。 System.out.println(maps.containsValue(100));//true System.out.println(maps.containsValue(10));//true System.out.println(maps.containsValue(22));//false //8、获取全部键的集合 Set keys = maps.keySet(); System.out.println(keys);//[huawei, 手表, 生活用品, 娃娃] //9、获取全部值的集合 Collection values = maps.values(); System.out.println(values);//[100, 10, 10, 20] //10、集合的大小 System.out.println(maps.size());//4 //11、合并其他map集合 Map map1 = new HashMap<>(); map1.put("java1",1); map1.put("java2",100); Map map2 = new HashMap<>(); map2.put("java3",1); map2.put("java2",1); map1.putAll(map2); System.out.println(map1);//{java3=1, java2=1, java1=1} System.out.println(map2);//{java2=1, java3=1} } }
Map集合的遍历方式一:键找值
- 先获取Map集合的全部键的Set集合。
- 遍历键的Set集合,然后通过键提取对应值。
- 键找值涉及到的API:
方法名称
说明
Set
获取所有键的集合
V get(Object key)
根据键获取值
Map集合的遍历方式二:键值对
- 先把Map集合转换成Set集合,Set集合中每个元素都是键值对实体类型了。
- 遍历Set集合,然后提取键以及提取值。
- 键值对涉及到的API:
方法名称
说明
Set
获取所有键值对对象的集合
K getKey()
获得键
V getValue()
获取值
Map集合的遍历方式三:Lambda
- 得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
Map结合Lambda遍历的API
方法名称
说明
default void forEach(BiConsumer super K,? super V> action)
结合lambda遍历Map集合
import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.function.BiConsumer; public class MapDemo3 { public static void main(String[] args) { // 1.添加元素:无序,不重复,无索引。 Mapmaps = new HashMap<>(); maps.put("iphoneX",10); maps.put("娃娃",20); maps.put( "huawei" ,100); maps.put("生活用品",10); maps.put("手表",10); System.out.println(maps);//{huawei=100, 手表=10, 生活用品=10, iphoneX=10, 娃娃=20} //1、方式一键找值:第一步:先拿到集合的全部键 // Set keys = maps.keySet(); // //2、第二步:遍历每个键,根据键取值 // for (String key : keys) { // int value = maps.get(key); // System.out.println(key + "==>" + value); // } //方式二:键值对,把Map集合转成Set集合 // Set > entries = maps.entrySet(); // for (Map.Entry entry:entries){ // String key = entry.getKey(); // Integer value = entry.getValue(); // System.out.println(key+"==>"+value); // } //方式三:Lambda // maps.forEach(new BiConsumer () { // @Override // public void accept(String key, Integer value) { // System.out.println(key+"----->"+value); // } // }); //简化版 maps.forEach((k,v) -> System.out.println(k+"----->"+v)); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)