Map集合与collection不同的是,Map存的是一对一对的对象,即键值key和key对应的value,key是唯一的,每一个key都有自己的value,所以value可以重复。
注意点:
1,添加时put(key,value)函数,返回的是key之前对应的value值,如果没有则返回null,所以这个功能也是修改功能,不同collection集合,添加是add,修改是set,同样因为有键,所以可以用get(key)功能获取值,list集合因为有角 标,也有get获取的方法,而set集合只有值,所以只能通过迭代器获取内容。
2,因为get(key)方法获取值时,如果没有这个键值对,则返回null,所以这个函数可以用做判断该集合内是否存在这个key键值对。同样还有contains(key)方法判断有无键值对,返回的是boolean。
3,打印集合时打印的是集合内各个键值对的对应关系的字符串表现形式,用大括号包括,如 Map<String, String> m=new TreeMap<String ,String>();
m.put("1", "lili");
m.put("2", "露露");
System.out.println(m)
输出为{1=lili,2=露露}
4,map集合内元素的取出,因为是键值对,map集合时没有迭代器的,但是map集合有两个方法,一个是keySet(),返回的key的Set集合,另一个是entrySet(),返回的是包含键值对信息对象(Map.Entry<e,e>)的Set集合,所以我们就可以用这个两个方法返回的set集合操作以获取内容。
如public class MapDemo {
public static void main(String[] args) {
Map<String, String> m=new TreeMap<String ,String>();
m.put("1", "lili");
m.put("2", "露露");
m.put("3", "小强");
Set<String> s=m.keySet();
Iterator<String> i=s.iterator();
while(i.hasNext()){
System.out.println(m.get(i.next())); //根据建就可以获取值
Map.Entry是定义在map接口内的一个内部类接口,反应了键和值的对应关系的一个接口,其有自己方法如getkey(),get()value()等可以取出键和值
Set<Map.Entry<String,String>> s1=m.entrySet();
Iterator<Map.Entry<String,String>> i1=s1.iterator();
while(i1.hasNext()){
Map.Entry<String, String> me=i1.next();
System.out.println(me.getKey()+"---"+me.getValue());
}}
5,Map常用的子类:
|--Hashtable :内部结构是哈希表,是同步的。不允许null作为键,null作为值。
|--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
|--HashMap : 内部结构是哈希表,不是同步的。允许null作为键,null作为值。
|--TreeMap : 内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。
因为map集合要保证键值的唯一,就像set集合保证元素唯一一样,它必须有自己的判断唯一的标准,这里HashMap用的和hashset同样的比较方法,调用要存储对象的hashcode()方法,如果相同再用equals()方法。TreeMap同treeset,是用对象的compareTo()来比较相同和排序,也可以在构造Treemap时传入一个比较器comparator的子类来实现比较