Map集合
Map集合和Collection集合没有任何关系。Collection集合是以单个方式存储元素的,而Map集合是以键值对
的方式存储元素,所有Map集合的Key是无序不可重复的
,key和value都是引用数据类型,存的都是内存的地址。
Map集合元素的存储形式:{键=值,键=值,...}
在Map集合中有两个主要的实现类:
HashMap
、TreeMap。
Map集合中常用的方法:
增:
V put(K key, V vlaue); //添加键值对的数据到map集合中
void putAll(Map<? extends K> k, Map<? extends V> v); //将一个map集合存放到另外一个map集合中
package com.lyc.lesson;
import java.util.HashMap;
import java.util.Map;
public class Lesson05 {
public static void main(String[] args) {
/**
* V put(K key, V value);添加键值对的数据到map集合中
*/
Map<Integer, String> map = new HashMap<>();
map.put(001,"张三");
map.put(002,"李四");
map.put(003,"王五");
System.out.println(map);
/**
* void putAll(Map<? extends K> k, Map<? extends V> v);
* 将一个map集合存放到另外一个map集合中
*/
Map<Integer, String> map1 = new HashMap<>();
map.put(004,"张三一");
map.put(005,"李四一");
map.put(006,"王五一");
map.putAll(map1);
System.out.println(map);
}
}
删:
V remove (K key); //通过键删除键值对的数据,返回值是值
package com.lyc.lesson;
import java.util.HashMap;
import java.util.Map;
public class Lesson06 {
public static void main(String[] args) {
/**
* V remove (K key);通过键删除键值对的数据,返回值是值
*/
Map<Integer, String> map = new HashMap<>();
map.put(001,"张三");
map.put(002,"李四");
map.put(003,"王五");
System.out.println(map.remove(001));
System.out.println(map);
}
}
改:
V put(K key V value); //当键值存在的时候,会将value值覆盖掉的
package com.lyc.lesson;
import java.util.HashMap;
import java.util.Map;
public class Lesson08 {
public static void main(String[] args) {
/**
* V put(K key V value);当键值存在的时候,会将value值覆盖掉的
*/
Map<Integer, String> map = new HashMap<>();
map.put(001,"张三");
map.put(002,"李四");
map.put(003,"王五");
map.put(001, "李华");
System.out.println(map);
}
}
查:
int size(); //查看集合中元素的个数
boolean isEmpty(); //判断是否为空,如果不为空返回的是false
boolean containsKey(); //是否包含这个键
boolean containsValue(); //是否包含这个值
package com.lyc.lesson;
import java.util.HashMap;
import java.util.Map;
public class Lesson09 {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(001,"张三");
map.put(002,"李四");
map.put(003,"王五");
//int size(); 查看集合中元素的个数
System.out.println(map.size());
//boolean isEmpty();判断是否为空,如果不为空返回的是false
System.out.println(map.isEmpty());
//boolean containsKey();是否包含这个键
System.out.println(map.containsKey(001));
//boolean containsValue();是否包含这个值
System.out.println(map.containsValue("李四"));
}
}
Map中相对重要的方法:
V get(K key); //通过键获取值
Set<K> keySet(); //获取map集合中的键,然后存到set集合中
Collection<V> values(); //获取map集合中值,存到了Collection集合中
package com.lyc.lesson;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Lesson10 {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(001,"张三");
map.put(002,"李四");
map.put(003,"王五");
/**
*遍历Map集合中的元素
* 1、先获得键
* 2、通过键,使用增强for循环获取值。
*/
Set<Integer> keySet = map.keySet(); //获得键
for (Integer integer : keySet) { //增强for循环
String s = map.get(integer); //通过建,获取值
System.out.println(integer +"="+s);
}
}
}
package com.lyc.lesson;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class Lesson13 {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(001,"张三");
map.put(002,"李四");
map.put(003,"王五");
/**
* Collection<V> values(); 获取map集合中值,存到了Collection集合中
*/
Collection<String> values = map.values();
for (String value : values) {
System.out.println(value);
}
}
}
Set<Map.Entry<K,V>> entrySet(); 将map集合的键值对,存到了set集合
这个方法在实际开发中经常实用,因为在Map.Entry这个接口中有两个实用的方法
1、getKey: 返回键值对的键
2、getValue: 返回键值对的值
package com.lyc.lesson;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Lesson12 {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(001,"张三");
map.put(002,"李四");
map.put(003,"王五");
Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
for (Map.Entry<Integer, String> entry : entrySet) {
System.out.print(entry.getKey()+" ");
System.out.print(entry.getValue()+" ");
}
}
}
对象作为Map集合中的value存入Map集合:
需求:现在要将一个实体类对象,先添加到List集合中,再将List集合作为value存入到Map集合中。
Person类:
package com.lyc.lesson;
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
测试类:
package com.lyc.lesson;
import java.util.*;
public class Demo2 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student("小华", 24));
list.add(new Student("小李", 26));
list.add(new Student("小明", 28));
list.add(new Student("小东", 23));
List<Student> list1 = new ArrayList<>();
list1.add(new Student("小木", 24));
list1.add(new Student("小西", 26));
list1.add(new Student("小南", 28));
list1.add(new Student("小北", 23));
Map<String, List<Student>> map1 = new HashMap<>();
map1.put("001", list);
map1.put("002", list1);
//以上在存值
//取值
Collection<List<Student>> values1 = map1.values();
for (List<Student> students : values1) {
for (Student student : students) {
System.out.println(student.name);
}
}