Map集合:一组成对的“键值对”对象。Collection和Map的区别在于容器中每个位置保存的元素个数。Collection每个位置只能保存一个元素或者对象 。此类容器包括List以特定的顺序保存一组元素,Set则是元素不能重复。
Map保存的“键值对”就像一个小型数据库:可以通过”键“找到对应的”值“!例如:我们平时可以根据学号找到与之对应的学生的信息。
Map接口用于保存关键字(Key)和数值(value)的集合。集合中的每个对象加入时都提供数值和关键字。Map接口既不继承Set也不能继承Collection。而是从自己的用于维护键——值关联的接口层次结构入手。
一般使用compareTo或者compare方法对键进行排序。它有三个实现:HashMap、TreeMap、LinkedHashMap。其中,HashMap能满足用户通用的对Map的需求,TreeMap支持对键有序的遍历,使用时建议先用HashMap增加和删除成员,再用HashMap生成TreeMap,同时附加实现了SortedMap接口,支持子Map等要求顺序的操作。而LinkedHashMap保留键的插入顺序,用equals方法检查键和值的相等性。我们还是使用HashMap比较多的。
Map接口中定义的常用方法:
(1)void clear():删除该Map对象中所有的键值对。
(2)boolean containsKey(Object key):查询Map中是否包含指定key。
(3)boolean containsValue(Object value):查询Map中是否包含一个或多个value。
(4)Set entrySet():返回Map中所包含的键值对所组成的Set集合,每个集合元素都是Map.Entry对象。
(5)Object get(Object obj):返回指定key所对应的value。如果没有,这返回null。
(6)boolean isEmpty():查询该Map是否为空,如果为空则返回true。
(7)Set keySet():返回该Map中所有key组成的Set集合。
(8)Object put(Object key, Object value):添加一个键值对,如果当前Map中已经有一个与该key相等的键值对,则新的键值对将覆盖原来的键值对。
(9)void putAll(Map m):将指定Map中的键值对复制到m中。
(10)Object remove(Object key):删除指定key所对应的键值对,如果不存在,则返回null。
(11)int size():返回Map里的键值对个数。
(12)Collection values():返回该Map里所有的vlaue组成的Collection。
那么如何对其进行遍历呢?下面就直接写代码展示,比较直观。
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;
public class MapBianLi {
public static void main(String[] args) {
HashMap map=new HashMap();
map.put(1, new Student("aaa", 18));
map.put(2, new Student("bbb", 17));
map.put(3, new Student("ccc", 16));
map.put(3, new Student("ccc", 16));
//map.put(null, null); map.put允许空值
System.out.println(map.size());//3,因为key值相同,所以就认为是同一组元素
System.out.println("========================");
/**
* 1.Key遍历:
* 通过key获取value
* Set set=map.keySet();获取当前map的key集合
* 遍历set集合,通过map.get()获得相对于的value
*/
Set set=map.keySet();
Iterator it=set.iterator();
while(it.hasNext()){
int key=(int)it.next();//你的map中的key值是什么类型,这里的变量就要是什么类型,对it.next进行强转,下面也一样
Student values=(Student)map.get(key);
System.out.println("key:"+key+",values:"+values);
}
System.out.println("*************************");
//2.通过values获得map的值集
Collection value=map.values();
Iterator it1=value.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}
//3.通过entrySet遍历
System.out.println("+++++++++++++++++++++++++");
Set entrySet=map.entrySet();
Iterator it2= entrySet.iterator();
while(it2.hasNext()){
Entry entry=(Entry)it2.next();
Student values1=(Student)entry.getValue();
int key1=(int)entry.getKey();
System.out.println("key:"+key1+",values:"+values1);
}
}
}