Map集合

1、特点

每个元素是一个键值对。

每个元素由两部分构成,一部分叫键,一部分叫值。

键是唯一的,每个元素的键不能相同,而值是可以相同的。

 

2、map接口

  • | V | put(K key, V value) 将指定的值与该映射中的指定键相关联(可选操作)。
  • | V | get(Object key) 返回到指定键所映射的值,或 null如果此映射包含该键的映射。 
  • | V | remove(Object key) 如果存在(从可选的操作),从该地图中删除一个键的映射。
  • | int | size() 返回此地图中键值映射的数量。
  • | boolean | isEmpty() 如果此地图不包含键值映射,则返回 true
    • booleancontainsKey(Object key) 如果此映射包含指定键的映射,则返回 true
      booleancontainsValue(Object value) 如果此地图将一个或多个键映射到指定的值,则返回 true
  • | void | clear() 从该地图中删除所有的映射(可选操作)。
  • | Set<K> | keySet() 返回此地图中包含的键的Set视图。
  • | Collection<V> | values() 返回此地图中包含的值的Collection视图。 
  • | Set<Map.Entry<K,V>> | entrySet() 返回此地图中包含的映射的Set视图。

 

3、Map的实现类

HashMap 、HashTable 、 TreeMap

(1)HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。

(2)HashTable:实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值,即不允许null键null值。

(3)TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。不允许null键,允许null值。

 

三种常规Map性能:
HashMap:适用于在Map中插入、删除和定位元素。
HashTable:单线程环境下,性能低,适用于完全的线程安全。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

 

总结:
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap,仅在你需要完全的线程安全的时候使用Hashtable。

 

4、HashMap使用方法

//        创建map集合
        Map map=new HashMap();

//        获取键值对数量
        System.out.println(map.size());
        System.out.println(map.isEmpty());

//      添加键值对
        map.put(1001,"zhangsan");
        map.put(1002,"lisi");
        map.put(1003,"wangwu");
        map.put(1004,"maliu");

        System.out.println(map.size());

//      获取元素
        System.out.println(map.get(1001));
        System.out.println(map.get(1002));
        System.out.println(map.get(1003));
        System.out.println(map.get(1004));

//        删除元素
        map.remove(1001);
        System.out.println(map.size());
        System.out.println(map.get(1001));

//        判断是否包含指定的键或值
        System.out.println(map.containsKey(1001));
        System.out.println(map.containsValue("lisi"));

//        清空集合
        map.clear();

5、Map集合遍历

//        创建map集合
        Map map=new HashMap();

//      添加键值对
        map.put(1001,"zhangsan");
        map.put(1002,"lisi");
        map.put(1003,"wangwu");
        map.put(1004,"maliu");
//        修改操作:修改键对应的值
        map.put(1001,"zhangsanfen");
        map.put(1005,"lisi");

//        System.out.println(map.size());
//        System.out.println(map.get(1001));

//        获取所有元素的键,以set集合返回
        Set ks = map.keySet();

        ks.forEach((k)->{
            System.out.println(k);
        });

//        获取所有元素的值,以Collection集合返回
        Collection vs = map.values();
        vs.forEach((v)->{
            System.out.println(v);
        });

//        获取所有的键值对,以Set集合返回
//        每个键值对使用Map.Entry类型存储
        Set set = map.entrySet();
        for(Object   o:set){
            Map.Entry   entry =(Map.Entry)o;
            System.out.println(entry.getKey()+","+entry.getValue());
        }
        
        //       等价键值对遍历
//        先找到所有元素的键,然后在根据键找值
        Set ks1 = map.keySet();
        for(Object  k:ks1){
            Object v = map.get(k);
            System.out.println(k+"="+v);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值