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


一、Map特点

Map<K,V>双列集合,存储的是键值对,必须保持键的唯一性。一个映射不能包含重复的键;每个键最多只能映射到一个值。(比如,一对夫妻Map<K,V>集合,中间的映射关系就是结婚证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<Integer,String> m = new HashMap<>();
    m.put(1,"aaa1");
    m.put(3,"aaa3");
    m.put(2,"aaa2");
    m.put(4,"aaa4");
    Set<Integer> keyset = m.keySet();//获取所有按键
    Iterator<Integer> it =  keyset.iterator();
    while(it.hasNext()){
        System.out.println(m.get(it.next()));//获取键值
    }

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

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

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

四、Map常用子类

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

/*按键是Person对象,键值是字符串对象*/
HashMap<Person, String> 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<Person> it = hm.keySet().iterator();
while (it.hasNext()) {
    Person p = it.next();
    System.out.println(p.getName() + ":" + p.getAge() + ":" + hm.get(p));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值