我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。
Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
Collection中的集合称为单列集合,Map中的集合称为双列集合。
需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
Map中常用的集合为HashMap集合、LinkedHashMap集合。
Map接口中常用集合有
HashMap集合
存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
LinkedHashMap集合
存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
Map接口中常用方法 put() , get() , remove()
package com.cracle.www.demo01; import java.util.HashMap; import java.util.Map; import java.util.Set; public class Demo02 { public static void main(String[] args) { Map<String,String> map =new HashMap<String,String>(); //向map中添加数据 map.put("1", "a"); map.put("2", "b"); map.put("2", "z"); map.put("3", "c"); //移除 map.remove("3"); //取数据 System.out.println(map.get("1")); System.out.println(map.get("2")); System.out.println(map.get("3")); //遍历 //1、keyset();获取Map中的Key所对应的集合。 Set<String> drt=map.keySet(); for(String s:drt) { String key= s; String value = map.get(key); System.out.println(key+"..."+value); } //2、Entry键值对对象 Set<Map.Entry<String, String>> s1 =map.entrySet(); for(Map.Entry<String, String> a1:s1) { String key=a1.getKey(); String value = a1.getValue(); System.out.println(key+"..."+value); } } }
Map集合遍历
package com.cracle.www.demo01; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class Demo04 { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("1", "value1"); map.put("2", "value2"); map.put("3", "value3"); //第一种:普遍使用,二次取值 System.out.println("通过Map.keySet遍历key和value:"); for (String key : map.keySet()) { System.out.println("key= "+ key + " and value= " + map.get(key)); } //第二种 System.out.println("通过Map.entrySet使用iterator遍历key和value:"); Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> entry = it.next(); System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } //第三种:推荐,尤其是容量大时 System.out.println("通过Map.entrySet遍历key和value"); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } //第四种 System.out.println("通过Map.values()遍历所有的value,但不能遍历key"); for (String v : map.values()) { System.out.println("value= " + v); } } }