集合那些事之 Map集合

Map集合介绍

Collection集合是单列集合,集合中的每个元素都是单个的,向集合中存储元素采用一个个的元素存储方式;

Map集合是双列集合,集合中的每个元素都是一组键值对(key-value),通过键可以找到对应的值。

需要注意的是:Map集合中的元素的键不能重复,值可以重复;每个键只能对应一个值。但是一个值可以对应多个键。

这就是 单列集合和双列集合在存储结构上的不同。

 

Map常用子类

    通过查看 Map 接口描述,看到 Map 有多个子类,这里我们主要讲解常用的 HashMap 集合、 LinkedHashMap 集合。
  • HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需 要重写键的hashCode()方法、equals()方法。
  • LinkedHashMapHashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链 表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键hashCode()方法、equals()方法。

Map接口中的常用方法 

  • public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
  • public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
  • public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
  • public Set keySet() : 获取Map集合中所有的键,存储到Set集合中。
  • public Set> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)

注意:

  • 在使用 put方法向集合中添加元素时,若指定的键(key)在集合中不存在,则没有这个键对应的值,返回null,并把指定的键值对添加到集合中;
  • 若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把该键键所对应的值,替换成新值。
public class MapDemo {
    public static void main(String[] args) {
        //创建 map对象
        HashMap<String, String> map = new HashMap<String, String>();
        //添加元素到集合
        map.put("黄晓明", "杨颖");
        map.put("文章", "马伊琍");
        map.put("邓超", "孙俪");
        System.out.println(map);
        //String remove(String key)
        System.out.println(map.remove("邓超"));
        System.out.println(map);
        // 想要查看 黄晓明的媳妇 是谁
        System.out.println(map.get("黄晓明"));
        System.out.println(map.get("邓超"));
    }
}

Map集合遍历

注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。

keySet()

    由于Map集合中的元素都是以键值对存在的,而我们一般是通过键(key)来获取值(value)的,Map提供了一个可以获取Map集合中所有键的方法keySet(),获取集合中所有键并将这些键存储到set集合中。然后我们根据键来获取值。

步骤:

  1. 获取Map集合中所有键,并存入Set集合中。    ----   keySet()
  2. 根据键获取值。   ----    get(Key)

代码演示:

public class MyMap {
    public static void main(String[] args) {
        //创建Map集合对象
        HashMap<String, String> map = new HashMap<String, String>();
        //添加元素到集合
        map.put("胡歌", "霍建华");
        map.put("郭德纲", "于谦");
        map.put("薛之谦", "大张伟");

        // 获取map集合中所有的键,并存储到Set集合中
        Set<String> keySet = map.keySet();

        // 遍历Set集合中存储的Map集合的键,并通过键获取值
        for (String key : keySet) {
            System.out.println("CP组合: " + key + " --> " + map.get(key));
        }
    }
}

结果:
CP组合: 郭德纲 --> 于谦
CP组合: 薛之谦 --> 大张伟
CP组合: 胡歌 --> 霍建华

 

Entry键值对对象

除了上边的 keySet + get(key k) 方法获取map的键值对外,我们还可以通过键值对对象来遍历map集合。

map集合中的元素是以键值对组合的方式进行存储的,我们可以将每组键值对都封装成一个对象来操作,map提供了一个entrySet()方法来获取这些键值对对象,还为这些键值对对象提供了获取key和value的方法。

  • public Set> entrySet() : 获取Map集合中的多有键值对对象,然后将这些对象存储到Set集合中
  • public K getKey() :获取 Entry 对象中的键。 public V getValue() :获取 Entry 对象中的值。
  • public V getValue() :获取 Entry 对象中的值。
    public static void testEntrySet() {
        //创建Map集合对象
        HashMap<String, String> map = new HashMap<String, String>();
        //添加元素到集合
        map.put("胡歌", "霍建华");
        map.put("郭德纲", "于谦");
        map.put("薛之谦", "大张伟");

        // 获取map集合的键值对对象,并存储到Set集合中
        Set<Map.Entry<String, String>> entries = map.entrySet();
        // 遍历set集合,并获取键值对对象(entry)的键(key)和值(value)
        for (Map.Entry<String, String> entry : entries) {
            System.out.println("CP组合: " + entry.getKey() + " --> " + entry.getValue());
        }
    }
    
    结果:
    CP组合: 郭德纲 --> 于谦
    CP组合: 薛之谦 --> 大张伟
    CP组合: 胡歌 --> 霍建华

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值