package com.collection.map;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.junit.Test;
/*
现实生活中,有些数据是以映射关系存在的,也就是成对出现的,例如:
老公------老婆
一把锁-----钥匙
身份证-----人
成对出现并有映射关系的数据一般用双列集合来存储;
双列集合的根接口:Map
------| Map:如果是实现了Map接口的集合类,具备的特点:存储的数据都是以键值对的方式存在的,键不可重复,值可以重复;
---------| HashMap:
---------| TreeMap:
---------| HashTable:
Map接口的方法:
添加:
put(K key, V value):添加元素 ;
putAll(Map<? extends K,? extends V> m):将一个集合中的元素添加到另一个集合中;
删除:
remove(Object key):根据键删除对应的值;如果键存在,返回对应的值;如果键不存在,返回null;
clear():清空集合中的所有元素;
获取:
get(Object key):根据键获取对应的值; 如果键不存在,返回null;
size():获取集合中元素的个数;
判断:
containsKey(Object key):判断集合中是否包含指定的键; 如果不存在,返回false;反则反之;
containsValue(Object value):判断集合中是否包含指定的值; 如果不存在,返回false;反则反之;
isEmpty():判断集合是否为空;如果为空,返回true;否则返回false;
迭代:
keySet()
values()
entrySet()
*/
public class Demo1 {
// 添加方法
@Test
public void test1(){
Map<String, String> map = new HashMap<String, String>();
map.put("汪峰", "章子怡");
map.put("文章", "马伊琍");
// put()返回值:如果之前没有存在该键,则返回null;如果之前已经存在该键,则返回该键之前对应的值;
// 第一次添加元素,键不存在,返回null;
System.out.println("返回值:" + map.put("谢霆锋", "张柏芝")); // 返回值:null
// 第二次添加元素,键已经存在,返回键之前对应的值;键不可重复,不能存在两个键一样的元素;
System.out.println("返回值:" + map.put("谢霆锋", "王菲"));; // 返回值:张柏芝
// 值可以重复:
map.put("窦唯", "王菲");
System.out.println("集合中的元素:" + map); // 输出的顺序和添加的顺序不一致
Map<String, String> map2 = new HashMap<String, String>();
map2.put("邓超", "孙俪");
map2.put("张家辉", "关咏荷");
map.putAll(map2); // 将map2集合中的元素全部添加到map集合中
System.out.println("集合中的元素:" + map);
}
// 删除方法
@Test
public void test2(){
Map<String, String> map = new HashMap<String, String>();
map.put("汪峰", "章子怡");
map.put("文章", "马伊琍");
map.put("李晨", "范冰冰");
// 根据键删除对应的值;如果键不存在,返回null;如果键存在,返回对应的值;
System.out.println("删除的元素:" + map.remove("狗娃")); // 删除的元素:null
System.out.println("删除的元素:" + map.remove("李晨")); // 删除的元素:范冰冰
System.out.println("集合中的元素:" + map);
map.clear();
System.out.println("集合中的元素:" + map);
}
// 获取方法
@Test
public void test3(){
Map<String, String> map = new HashMap<String, String>();
map.put("汪峰", "章子怡");
map.put("文章", "马伊琍");
map.put("李晨", "范冰冰");
// 根据键获取对应的值;如果键不存在,返回null;
System.out.println("获取到的元素:" + map.get("文章"));
System.out.println("获取到的元素:" + map.get("邓超"));
System.out.println("集合中元素的个数:" + map.size());
}
// 判断方法
@Test
public void test4(){
Map<String, String> map = new HashMap<String, String>();
map.put("汪峰", "章子怡");
map.put("文章", "马伊琍");
map.put("李晨", "范冰冰");
System.out.println("判断是否包含指定的键:" + map.containsKey("文章")); // true
System.out.println("判断是否包含指定的键:" + map.containsKey("渣男")); // false
System.out.println("判断是否包含指定的值:" + map.containsValue("范冰冰")); // true
System.out.println("判断是否包含指定的值:" + map.containsValue("冰冰")); // false
System.out.println("-------------");
System.out.println("集合是否为空:" + map.isEmpty()); // false
map.clear();
System.out.println("集合是否为空:" + map.isEmpty()); // true
map.put(null, null); // null也是一个元素;
System.out.println("集合是否为空:" + map.isEmpty()); // false
}
// 迭代方法
@Test
public void test5(){
Map<String, String> map = new HashMap<String, String>();
map.put("汪峰", "章子怡");
map.put("文章", "马伊琍");
map.put("李晨", "范冰冰");
map.put("成龙", "林凤娇");
// Map集合中遍历方式一:使用keySet()方法进行遍历;缺点:keySet()方法只是返回了所有键,没有值;
Set<String> keys = map.keySet();
Iterator<String> it = keys.iterator();
while (it.hasNext()){
String key = it.next(); // 获取键
String value = map.get(key); // 根据键获取值
System.out.println(key + "---" + value);
}
System.out.println("----------------------");
// Map集合的遍历方式二:使用values()方法进行遍历;缺点:values()方法只能返回所有的值,没有键;
Collection<String> values = map.values();
Iterator<String> ite = values.iterator();
while (ite.hasNext()){
String value = ite.next(); // 获取值
System.out.println("值:" + value);
}
System.out.println("----------------------");
// Map集合的遍历方式三:entrySet()方法遍历;
Set<Entry<String, String>> entrySet = map.entrySet();
Iterator<Entry<String, String>> iterator = entrySet.iterator();
while (iterator.hasNext()){
Entry<String, String> entry = iterator.next();
String key = entry.getKey(); // 获取键
String value = entry.getValue(); // 获取值
System.out.println(key + "---" + value);
}
}
}