文章目录
1.Map集合
1.1 Map集合的概述
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
通俗的讲是键和值要一一对应,且键的‘值’不能相同,但值的‘值’能相同
1.2 Map集合的创建并添加对象
因为Map为一个接口,所以需要采用多态的方式去创建对象,这里采用HashMap如下:
Map(String String) map = new HashMap();
//put(K key,V value):添加元素。
map.put("it001", "林青霞");
map.put("it002", "张曼玉");
map.put("it003", "王祖贤");
1.3 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():返回集合中的键值对的对数
代码演示
import java.util.HashMap;
import java.util.Map;
public class MapDemo2 {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map = new HashMap<String,String>();
//V put(K key,V value):添加元素
//如果键是第一次存储,就直接存储元素,返回null
//如果键不是第一次存储,就用值把以前的值替换,返回以前的值
System.out.println("put:"+map.put("张无忌", "周芷若"));
System.out.println("put:"+map.put("张无忌", "赵敏"));
map.put("张无忌", "赵敏");
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
//V remove(Object key):根据键删除键值对元素
System.out.println("remove:"+map.remove("郭靖"));
System.out.println("remove:"+map.remove("郭襄"));
//void clear():移除所有的键值对元素
map.clear();
//boolean containsKey(Object key):判断集合是否包含指定的键
System.out.println("containsKey:"+map.containsKey("郭靖"));
System.out.println("containsKey:"+map.containsKey("郭襄"));
//boolean containsValue(Object value):判断集合是否包含指定的值 自己练习
//boolean isEmpty():判断集合是否为空
System.out.println("isEmpty:"+map.isEmpty());
//int size():返回集合中的键值对的对数
System.out.println("size:"+map.size());
//输出集合对象
System.out.println(map);
}
}
1.4 Map集合的获取功能测试
V get(Object key):根据键获取值
Set keySet():获取所有键的集合
Collection values():获取所有值的集合
//V get(Object key):根据键获取值
System.out.println("get:"+map.get("张无忌"));
System.out.println("get:"+map.get("张三丰"));
System.out.println("--------------------");
//Set<K> keySet():获取所有键的集合
Set<String> set = map.keySet();
for(String key : set) {
System.out.println(key);
}
System.out.println("--------------------");
//Collection<V> values():获取所有值的集合
Collection<String> values = map.values();
for(String value : values) {
System.out.println(value);
}
1.5 Map集合的遍历
1.5.1 通过键值对找值
- 获取所有键的集合
- 遍历键的集合,获取到每一个键
- 根据键去找值
代码演示
public static void main(String[] args) {
//1.创建map对象
Map<String,String> map = new HashMap<>();
//2.给对象添加值
map.put("x01","张三");
map.put("x02","李四");
map.put("x03","王五");
map.put("x04","王五");
//3.通过键值对找值
Set<String> stringSet = map.keySet();
//4.遍历
for (String s :stringSet
) {
String s1 = map.get(s);
System.out.println(s1);
}
/*输出:
* 张三
* 王五
* 李四
* 王五
*
* */
}
1.5.2 通过键值对对象找键和值
- 获取所有键值对对象的集合
- 遍历键值对对象的集合,得到每一个键值对对象
- 根据键值对对象获取键和值
代码演示
//3. 通过键值对对象找键和值
Set<Map.Entry<String, String>> entries = map.entrySet();
//4.迭代法遍历
Iterator<Map.Entry<String, String>> iterator = entries.iterator();
while (iterator.hasNext()){
Map.Entry<String, String> next = iterator.next();
System.out.println(next.getKey()+"--------"+next.getValue());
}
//5.增强for遍历
for (Map.Entry me :entries
) {
System.out.println(me.getKey()+"----------"+me.getValue());
}
1.5.3 两种遍历方式图解
2 HashMap集合的几个练习
2.1 HashMap集合的练习键是String值是Student
代码演示
public static void main(String[] args) {
//1. 创建HashMap的对象
HashMap<String,Student> hm = new HashMap<>();
//2. 创建Student对象
Student s1 = new Student(18,"张某");
Student s2 = new Student(19,"李某");
Student s3 = new Student(20,"王某");
//3. 给hm对象添加元素
hm.put("广州",s1);
hm.put("深圳",s2);
hm.put("北京",s3);
//4. 遍历Map集合的元素
Set<String> stringSet = hm.keySet();
for (String s :stringSet
) {
System.out.println("信息:"+hm.get(s).toString());
}
/*输出:
* 信息:Student{age=18, name='张某'}
* 信息:Student{age=19, name='李某'}
* 信息:Student{age=20, name='王某'}
*
* */
}
2.2 HashMap集合的练习键是Student值是String
代码演示
public static void main(String[] args) {
//1. 创建HashMap的对象
HashMap<Student,String> hm = new HashMap<>();
//2. 创建Student对象
Student s1 = new Student(18,"张某");
Student s2 = new Student(19,"李某");
Student s3 = new Student(20,"王某");
// 3.添加元素
hm.put(s1,"广州");
hm.put(s2,"杭州");
hm.put(s3,"北京");
// 4.遍历
Set<Student> students = hm.keySet();
for (Student st:students
) {
System.out.println("地址:"+hm.get(st));
}
/*
* 输出:
* 地址:北京
* 地址:杭州
* 地址:广州
*
* */
}
3 集合的嵌套练习
3.1 ArrayList嵌套HashMap
代码演示
public static void main(String[] args) {
ArrayList<HashMap<String,String>> array = new ArrayList<HashMap<String,String>>();
//创建元素1
HashMap<String,String> hm1 = new HashMap<String,String>();
hm1.put("孙策","大乔");
hm1.put("周瑜","小乔");
//把元素添加到array中
array.add(hm1);
//创建元素2
HashMap<String,String> hm2 = new HashMap<String,String>();
hm2.put("刘备","孙尚香");
hm2.put("诸葛亮","黄月英");
//把元素添加到array中
array.add(hm2);
//创建元素3
HashMap<String,String> hm3 = new HashMap<String,String>();
hm3.put("云中君","瑶");
hm3.put("吕布","貂蝉");
//把元素添加到array中
array.add(hm3);
//遍历ArrayList
for (HashMap<String,String> hm : array
) {
Set<String> stringSet = hm.keySet();
for (String s:stringSet
) {
String s1 = hm.get(s);
System.out.println(s1);
}
}
}
3.1 HashMap嵌套ArrayList
代码演示
public static void main(String[] args) {
//创建对象
HashMap<String,ArrayList<String>> hm = new HashMap<>();
//创建元素1
ArrayList<String> sgyy = new ArrayList<String>();
sgyy.add("诸葛亮");
sgyy.add("赵云");
//把元素添加到hm中
hm.put("三国演义", sgyy);
//创建元素2
ArrayList<String> xyj = new ArrayList<String>();
xyj.add("唐僧");
xyj.add("孙悟空");
//把元素添加到hm中
hm.put("西游记", xyj);
//创建元素3
ArrayList<String> shz = new ArrayList<String>();
shz.add("武松");
shz.add("鲁智深");
//把元素添加到hm中
hm.put("水浒传", shz);
//遍历
Set<String> stringSet = hm.keySet();
for (String s: stringSet
) {
ArrayList<String> strings = hm.get(s);
for (String ss : strings
) {
System.out.println(ss);
}
}
}