Map集合概述和特点
Map集合在java.util包下。Map<K,V>集合的泛型由两部分组成,K是存储的键类型,V是存储的值类型
Map集合是一个接口,该集合是将键映射到值的对象。不能有重复的键,每个键可以映射到最多一个值
该集合是个接口,不能直接创建对象,我们需要用到该接口的实现类HashMap
如何创建Map集合的对象,如下 1、多态的方式 2、具体的实现类HashMap
Map集合概述和特点的练习
xxxxxxxxxx
package ch17;
import java.util.HashMap;
import java.util.Map;
public class a_1_2测试 {
//创建Map集合的对象
Map<String,String> map = new HashMap<String,String>(); //键是String类型,值是String类型
//Map集合的添加方法,如下
//put(K key,V value),作用是将指定的值
}
Map集合的基本功能
方法名 | 说明 |
---|---|
V put(K key,V value) | 添加元素 |
V remove(Object key) | 根据键删除键值对元素 |
void clear() | 移除所有的键值对元素 |
boolean containsKey(Object key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中键值对的个数 |
Map集合基本功能的练习
xxxxxxxxxx
package ch17;
import java.util.HashMap;
import java.util.Map;
public class a_2_1测试 {
public static void main(String[] args) {
//创建Map的集合对象
Map<String,String> map = new HashMap<String,String>(); //键是String类型,值也是String类型
//V put(K key,V value) 添加元素
map.put("厦门大学","张三");
map.put("福建大学","李四");
map.put("西安大学","王五");
System.out.println(map);//输出{厦门大学=张三, 西安大学=王五, 福建大学=李四}
System.out.println("-----------------------");
//---------------------------------------------------------------------------------------------------------------
//V remove(Object key) 根据键删除键值对元素
System.out.println(map.remove("厦门大学"));
System.out.println(map);//输出{西安大学=王五, 福建大学=李四}
System.out.println(map.remove("未来大学")); //如果不存在"未来大学"键时,会找不到值,从而输出null
System.out.println("-----------------------");
//——--------------------------------------------------------------------------------------------------------------
//void clear() 移除所有的键值对元素
//map.clear(); //我先注释了,需要自行解开
//System.out.println(map);//输出{}
//System.out.println("-----------------------");
//----------------------------------------------------------------------------------------------------------------
//boolean containsKey(Object key) 判断集合是否包含指定的键
System.out.println(map.containsKey("福建大学"));//输出true,即集合里面存在"福建大学"键
System.out.println(map.containsKey("未来大学"));//输出false,即集合里面存在"未来大学"键
System.out.println("-----------------------");
//-----------------------------------------------------------------------------------------------------------------
//boolean containsValue(Object value) 判断集合是否包含指定的值
System.out.println(map.containsValue("李四"));//输出true,即集合里面存在"李四"值
System.out.println(map.containsValue("李四四"));//输出false,即集合里面存在"里四四"值
System.out.println("-----------------------");
//-----------------------------------------------------------------------------------------------------------------
//boolean isEmpty() 判断集合是否为空
System.out.println(map.isEmpty()); //当集合中有元素就会输出false。当集合中没有元素就会输出true
System.out.println("-----------------------");
//-----------------------------------------------------------------------------------------------------------------
//int size() 集合的长度,也就是集合中键值对的个数
System.out.println(map.size()); //输出2,即表示此时集合中存在2个键值对
}
}
Map集合的获取功能
方法名 | 说明 |
---|---|
V get(Object key) | 根据键获取值 |
Set | 获取所有键的集合,因为Map集合返回的键是唯一的,所以这里是Set集合 |
Collocation | 获取所有值的集合,因为Map集合的值不是唯一的,所以这里是collocation集合 |
Set<Map.Entry<K,V>> entrySet() | 获取所有键值对对象的集合 |
Map集合获取功能的练习
xxxxxxxxxx
package ch17;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class a_3_1测试 {
public static void main(String[] args) {
//创建Map集合的对象
Map<String,String> map = new HashMap<String,String>();
//添加元素
map.put("厦门大学","张三");
map.put("福建大学","李四");
map.put("西安大学","王五");
//V get(Object key) 根据键获取值
System.out.println(map.get("福建大学"));
System.out.println(map.get("未来大学")); //当键不存在时,搜索不到对应的值,即输出null
System.out.println("---------------------");
//--------------------------------------------------------------------------------------------------------------
//Set<K>keySet() 获取所有键的集合,因为Map集合返回的键是唯一的,所以这里是Set集合
Set<String> keySet = map.keySet();
//因为上面那行得到的是Set集合,所以我们可以使用增强for进行遍历集合,如下
for(String key : keySet){
System.out.println(key);//输出厦门、大学西安、大学福建大学。即输出Map集合的所有键
}
System.out.println("--------------------");
//---------------------------------------------------------------------------------------------------------------
//Collocation<V> values() 获取所有值的集合,因为Map集合的值不是唯一的,所以这里是collocation集合
Collection<String> values = map.values();
//因为上面那行得到的是collection集合,所以我们也可以使用增强for循环
for(String value : values){
System.out.println(value);//输出张三、王五、李四。即输出Map集合里面的所有值
}
}
}
Map集合的遍历_方式1
我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个键值对的集合
遍历的实现思路: 1、把所有的学校给集中起来 2、遍历学校的集合,获取到每一个学校 3、根据学校去找对应的学生
如何转换为Map集合中的操作: 1、获取所有键的集合。用keySet方法实现 2、遍历键的集合,获取到每一个键。用增强for实现 3、根据键去找值,用get(Object key)方法实现
Map集合遍历_方式1的练习
xxxxxxxxxx
package ch17;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class a_4_1测试 {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("厦门大学", "张三");
map.put("福建大学", "李四");
map.put("西安大学", "王五");
//1、获取所有键的集合。用keySet方法实现
Set<String> keySet = map.keySet();
//2、遍历键的集合,获取到每一个键。用增强for实现
for (String key : keySet) {
String value = map.get(key);
System.out.println(key + "," + value); //注意这里是无序输出
}
}
}
Map集合的遍历_方式2
注意:我们的Map集合里面需要有键值对对象(老师对象)、学校键、学生值
遍历思路: 1、获取所有老师的集合 2、遍历老师的集合,得到每一个老师 3、根据老师获取学校和学生
转换为Map集合中的操作: 1、获取所有键值对对象的集合。用到entrySet()方法,该方法返回的是Set集合,其中包括Map.Entry键值对对象,该对象包含了键和值 2、遍历键值对对象的集合,得到每一个键值对对象。用到增强for,得到每一个Map.Entry 3、根据键值对对象获取键和值。用getKey()得到键,用getValue()得到值
Map集合遍历_方式2的练习
xxxxxxxxxx
package ch17;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class a_5_1测试 {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("厦门大学", "张三");
map.put("福建大学", "李四");
map.put("西安大学", "王五");
//1、获取所有键值对对象的集合。通过entrySet()方法得到左边的Set集合
Set<Map.Entry<String, String>> entrySet = map.entrySet();//Set集合的元素类型是Map.Entry<String, String>
//2、遍历老师的集合,得到每一个老师
for(Map.Entry<String, String> me : entrySet){
//3、根据键值对对象获取键和值。用getKey()得到键,用getValue()得到值
String key = me.getKey();//注意要把键和值看做是一个整体,即对象me。然后通过me调用方法
String value = me.getValue(); //这样就得到我们需要的键和值
System.out.println(key+","+value);
}
}
}
xxxxxxxxxx
package ch17;
import java.util.HashMap;
import java.util.Set;
public class a_7_2测试 {
public static void main(String[] args) {
//创建HashMap集合对象
HashMap<a_7_1Student, String> hm = new HashMap<a_7_1Student, String>(); //注意键是Student类型,值是String类型
//创建学生对象
a_7_1Student s1 = new a_7_1Student("张三", 18);
a_7_1Student s2 = new a_7_1Student("李四", 19);
a_7_1Student s3 = new a_7_1Student("王五", 20);
a_7_1Student s4 = new a_7_1Student("王五", 20);//注意s3和s4的成员内容是一样的
//把学生添加到集合。注意:这里的学生是作为键存在的
hm.put(s1, "海南");
hm.put(s2, "厦门");
hm.put(s3, "福建");
hm.put(s4, "覆盖了吗");//因为上面s3和s4的成员内容是一样,即键一样,原来的s3是对应福建,s3里面的福建会被这行的"覆盖了吗"值覆盖掉吗
//我们需要它覆盖,但是却没有覆盖。解决:在学生类里面重写hashCode()和equals()方法。重写了之后,后面的值"覆盖了吗"就会覆盖"福建"
//遍历集合。有两种写法可以实现遍历HashMap集合,这里只使用键找值的写法
Set<a_7_1Student> keySet = hm.keySet(); //快捷键:先输入hm.keySet();,再按Ctrl+Alt+V
//遍历该集合
for (a_7_1Student key : keySet) { //注意这里这个键是Student类型,遍历的时候要写Student类型
//键找值
String value = hm.get(key); //注意这个key是学生对象
System.out.println(key.getName() + "," + key.getAge() + "," + value);
}
}
}