(十七)JAVA入门--Map集合


一、Map特点

Map双列集合,存储的是键值对,必须保持键的唯一性。一个映射不能包含重复的键;每个键最多只能映射到一个值。(比如,一对夫妻Map集合,中间的映射关系就是结婚证entrySet)。

二、Map常用方法

1、添加:
v put(key, value):返回前一个和key关联的值,如果没有返回null。
2、删除:
void clear() :清空map集合。
v remove(key) :根据指定的key删除这个键值对,并返回该key的键值。
3、判断
boolean containsKey(key)
boolean containsValue(value)
boolean isEmpty()
4、获取
v get(key):返回指定key的值,如果没有键值,则返回值。
int size():获取键值对的个数。

三、Map获取按键和键值的两种方法

1、KeySet:首先利用KeySet方法获取所有按键集合Set,然后利用迭代器和get方法获取所有键值。

    HashMap m = new HashMap<>();
    m.put(1,"aaa1");
    m.put(3,"aaa3");
    m.put(2,"aaa2");
    m.put(4,"aaa4");
    Set keyset = m.keySet();//获取所有按键
    Iterator it =  keyset.iterator();
    while(it.hasNext()){
        System.out.println(m.get(it.next()));//获取键值
    }

2、entrySet的运用:取出映射关系和所有按键和键值。

    HashMap m = new HashMap<>();
    m.put(1,"aaa1");
    m.put(3,"aaa3");
    m.put(2,"aaa2");
    m.put(4,"aaa4");
    /*返回值是映射关系对象的集合(结婚证类型)*/
    Set> me = m.entrySet();
    Iterator> it = me.iterator();
    while(it.hasNext()){
        /*mevalue是结婚证类型的对象*/
        Map.Entry mevalue = it.next();
        /*结婚证类型的对象调用方法*/
        Integer k = mevalue.getKey();
        String v = mevalue.getValue();
        System.out.println(k+"::"+v);
    }

说明:Set> entrySet();返回的是一个映射关系的集合。Map.Entry是一个接口类型,有自己的方法,当具体实现这个接口时,就会建立相应的对象,来调用方法。

四、Map常用子类

1、Hashtable:内部是哈希表,同步,不能空键、空值。(其中有个子类Properties,后面结合IO接口,配置文件信息。)
2、HashMap:内部是哈希表,不同步,可以空键、空值。(LinkedHashMap是有序的,怎么存,怎么取)
3、TreeMap:内部是二叉树,不同步,可以对key进行排序。
4、例子—-具体实现

/*按键是Person对象,键值是字符串对象*/
HashMap hm = new HashMap<>();
hm.put(new Person("xx1", 11), "上海");
hm.put(new Person("xx3", 13), "广州");
hm.put(new Person("xx6", 16), "南京");
hm.put(new Person("xx5", 15), "北京");
hm.put(new Person("xx1", 11), "临沂"); 
//自定义哈希算法判断key相等,key相等可以覆盖键值,符合Map集合特点。
/*迭代器注意集合内的存储的对象类型*/
Iterator it = hm.keySet().iterator();
while (it.hasNext()) {
    Person p = it.next();
    System.out.println(p.getName() + ":" + p.getAge() + ":" + hm.get(p));
}

你可能感兴趣的:(Java入门)