Map集合概述和特点
概述:
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。
Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。
a:添加功能
V put(K key,V value):添加元素。这个其实还有另一个功能?替换
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
b:删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
c:判断功能
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
d:获取功能
Set
V get(Object key):根据键获取值
Set keySet():获取集合中所有键的集合
Collection values():获取集合中所有值的集合
e:长度功能
int size():返回集合中的键值对的对数
Map 接口中提供的常用方法如表 1 所示。
具体的实现代码如下:
import java.util.HashMap;
import java.util.Map;public class A01_MapDemo1 {public static void main(String[] args) {// TODO Auto-generated method stub//1.创建Map集合对象Map m=new HashMap();//2.添加元素m.put("郭靖", "黄蓉");m.put("韦小宝", "木健平");m.put("尹志平", "小龙女");m.put("韦小宝", "小龙女");//4.删除//String result=m.remove("郭靖");//System.out.println(result);//5.清空//m.clear();//6.是否包含指定的键//boolean result=m.containsKey("韦小宝");//System.out.println(result);//7.是否包含指定的值//boolean result=m.containsValue("小龙女");//System.out.println(result);//8.判断集合是否为空boolean result=m.isEmpty();System.out.println(result);//9.集合的长度,也就是键值对的个数int length=m.size();System.out.println(length);//3.打印集合System.out.println(m);}}
LinkedHashMap的概述: Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序LinkedHashMap的特点: 底层的数据结构是链表和哈希表 元素有序 并且唯一
元素的有序性由链表数据结构保证 唯一性由 哈希表数据结构保证
Map集合的数据结构只和键有关
案例需求:
创建一个HashMap集合,键是学生对象(Student,值是String)。
存储三个键值对元素,并遍历
要求:同姓名、同年龄认为是同一个学生
public class Student {private String name;private int age;public Student() {// TODO Auto-generated constructor stub}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student {name=" + name + ", age=" + age + "}";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;public class A05_MapDemp5 {public static void main(String[] args) {// TODO Auto-generated method stub//1.创建HashMap集合HashMap map=new HashMap<>();//2.创建三个学生对象Student s1=new Student("张三",23);Student s2=new Student("李四",24);Student s3=new Student("王五",25);Student s4=new Student("王五",25);//3.将三个学生对象添加到集合当中map.put(s1, "河北");map.put(s2, "安徽");map.put(s3, "浙江");map.put(s4, "江苏");Set keys=map.keySet();for(Student key:keys) {String value=map.get(key);System.out.println(key+"="+value);}}}