目录
Map接口
Map接口简介
Map 接口存储一组键值对象,提供key(键)到value(值)的映射。Map集合中每个元素都包含一对键值,并且Key是唯一的,在使用Map集合时可以通过指的Key找到对应的Value。Map接口的主要实现类有HashMap和TreeMap。
HashMap集合
HashMap集合时Map接口的一个实现类,它用于存储键值映射关系,该集合的键和值允许为空,但键不能重复,且集合中的元素是无序的。
Map集合遍历
Iterator迭代器遍历Map集合
使用Iterator遍历集合需要先将Map集合转换为Iterator接口对象,然后进行遍历。由于Map集合中元素是有键值对构成的,所以使用Iterator遍历,有两种方法,即keySet()和entrySet()
keySet()方法需要将Map集合中所有的键对象转换为Set集合,接着将含键对象的Set集合转换为Iterator接口对象,然后遍历Map集合中所有的键,再根据键获取相应的值。
public static void main(String[] args) {
Map map =new HashMap();
map.put("k","数据1");
map.put("v","数据2");
map.put("g","数据3");
Set keySet =map.keySet(); // 获取了键(key)的set集合
Iterator iterator=keySet.iterator(); //生成迭代器
while(iterator.hasNext()){ //判断迭代器下一位置是否有数据
Object key=iterator.next(); //返回迭代器下一位置数据,并指向下一位置。
Object value=map.get(key); //根据key去获取value
System.out.println(key+":"+value);
}
}
或者直接遍历Set集合也可以获取所有的value。
public static void main(String[] args) {
Map map =new HashMap();
map.put("k","数据1");
map.put("v","数据2");
map.put("g","数据3");
Set keySet =map.keySet(); // 获取了键(key)的set集合
keySet.forEach(k-> System.out.println(k+":"+map.get(k)));
}
运行结果:
entrySet()方法将原有的Map集合中的键值对作为一个整体返回Set集合,接着将包含键值对对象的Set集合转换为Iterator接口对象,然后获取集合中的所有键值对映射关系,在从映射关系中取出键和值。
public static void main(String[] args) {
Map map =new HashMap();
map.put("k","数据1");
map.put("v","数据2");
map.put("g","数据3");
Set entrySet =map.entrySet(); // 获取了键值对的set集合
Iterator iterator=entrySet.iterator(); //生成迭代器
while(iterator.hasNext()){ //判断迭代器下一位置是否有数据
// 强转成Map.Entry,否则无法使用getKey()和getValue方法,或者指定泛型也可以。
Map.Entry entry= (Map.Entry) iterator.next(); //返回迭代器下一位置数据,并指向下一位置。
Object key=entry.getKey();
Object value=entry.getValue();
System.out.println(key+":"+value);
}
}
运行结果:
直接使用forEach遍历
public static void main(String[] args) {
Map map =new HashMap();
map.put("k","数据1");
map.put("v","数据2");
map.put("g","数据3");
Set entrySet =map.entrySet(); // 获取了键值对的set集合
entrySet.forEach(v-> System.out.println(v)); //直接输出键值对
entrySet.forEach(v-> {
//将v强转成Map.Entry,否则无法使用getKey()和getValue方法,
//或者指定泛型也可以。
Map.Entry entry= (Map.Entry) v;
Object key=entry.getKey();
Object value=entry.getValue();
System.out.println(key+":"+value);
} );
}
运行结果:
使用forEach方法遍历Map集合
public class Class5 {
public static void main(String[] args) {
Map map =new HashMap();
map.put("k","数据1");
map.put("v","数据2");
map.put("g","数据3");
map.forEach((k,v)-> System.out.println(k+":"+v));
}
}
运行结果:
在map集合中还提供了一个values()的方法,通过这个方法,可以直接获取Map中存储所有值的Collection集合
public static void main(String[] args) {
Map map =new HashMap();
map.put("k","数据1");
map.put("v","数据2");
map.put("g","数据3");
Collection collection= map.values();
collection.forEach(v-> System.out.println(v));
}
运行结果:
从上面运行结果我们可以看出,map中存储数据是无序的,和存的先后顺序无关,如果我们想要实现一个可以保证插入顺序的map,可以采用HashMap的一个子类LinkedHashMap集合
LinkedHashMap集合
public static void main(String[] args) {
LinkedHashMap map = new LinkedHashMap();
map.put("k","数据1");
map.put("v","数据2");
map.put("g","数据3");
map.forEach((k,v)-> System.out.println(k+":"+v));
}
运行结果
集合中方法
基本方法
一些基本的方法就直接在代码中体现了
public static void main(String[] args) {
Map map =new HashMap();
map.put("k","数据1");
map.put("v","数据2");
map.put("g","数据3");
map.containsKey("v"); //判断集合中是否存在"v"这个键
map.isEmpty(); //集合是否为空
map.remove("v"); // 删除键为"v"的键值对
map.containsValue("数据1"); //判断集合中是否存在"数据1"这个值
// 获取集合中键为"z"的值,如果集合中没用这个数据,就添加键值对("z","数据4")
map.getOrDefault("z","数据4");
map.size(); //集合大小
map.clear(); //集合清空
}