Java学习Map

MapDemo

map存储的是k-v键值对映射的数据

  •  实现子类:
    
  •      HashMap:数据+链表(1.7) 数组+链表+红黑树(1.8)
    
  •      LinkedHashMap:链表
    
  •      TreeMap:红黑树
    
  •  基本api操作:
    
  •      增加:
    
  •          put(k,v)    添加元素
    
  •      查找:
    
  •          isEmpty      判断是否为空
    
  •          size        返回map的大小
    
  •          containsKey
    
  •          containsValue
    
  •          get
    
  •      删除:
    
  •          clear 清空集合中的所有元素
    
  •          remove:删除指定元素
    
  • Map.entry:表示的是K-V组合的一组映射关系,key和value成组出现
    
  • hashmap跟hashtable的区别:
    
  •  1、hashmap线程不安全,效率比较高,hashtable线程安全,效率低
    
  •  2、hashmap中key和value都可以为空,hashtable不允许为空
    
  •  hashmap初始值为2的N次幂,
    
  •      1、方便进行&操作,提高效率,&要比取模运算效率要高
    
  •          hash & (initCapacity-1)
    
  •      2、在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位是0或者是1即可
    
  •          如果是0,表示新数组和就数组的下标位置不变,如果是1,只需要将索引位置加上旧的数组的长度值即为新数组的下标
    
  •  1.7源码知识点:  数组+链表
    
  •      1、默认初始容量
    
  •      2、加载因子
    
  •      3、put操作
    
  •          1、设置值,计算hash
    
  •          2、扩容操作
    
  •          3、数据迁移的过程
    
  •  1.8源码知识点:   数组+链表+红黑树
    

*/

/**

  • @author: 马士兵教育
  • @create: 2019-09-21 20:09
    */

/**

  • map存储的是k-v键值对映射的数据
  •  实现子类:
    
  •      HashMap:数据+链表(1.7) 数组+链表+红黑树(1.8)
    
  •      LinkedHashMap:链表
    
  •      TreeMap:红黑树
    
  •  基本api操作:
    
  •      增加:
    
  •          put(k,v)    添加元素
    
  •      查找:
    
  •          isEmpty      判断是否为空
    
  •          size        返回map的大小
    
  •          containsKey
    
  •          containsValue
    
  •          get
    
  •      删除:
    
  •          clear 清空集合中的所有元素
    
  •          remove:删除指定元素
    
  • Map.entry:表示的是K-V组合的一组映射关系,key和value成组出现
    
  • hashmap跟hashtable的区别:
    
  •  1、hashmap线程不安全,效率比较高,hashtable线程安全,效率低
    
  •  2、hashmap中key和value都可以为空,hashtable不允许为空
    
  •  hashmap初始值为2的N次幂,
    
  •      1、方便进行&操作,提高效率,&要比取模运算效率要高
    
  •          hash & (initCapacity-1)
    
  •      2、在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位是0或者是1即可
    
  •          如果是0,表示新数组和就数组的下标位置不变,如果是1,只需要将索引位置加上旧的数组的长度值即为新数组的下标
    
  •  1.7源码知识点:  数组+链表
    
  •      1、默认初始容量
    
  •      2、加载因子
    
  •      3、put操作
    
  •          1、设置值,计算hash
    
  •          2、扩容操作
    
  •          3、数据迁移的过程
    
  •  1.8源码知识点:   数组+链表+红黑树
    

*/

package com.mashibing.map;

import java.util.*;
/*map存储的是k-v键值对映射的数据
 *      实现子类:
 *          HashMap:数据+链表(1.7) 数组+链表+红黑树(1.8)
 *          LinkedHashMap:链表
 *          TreeMap:红黑树
 *
 *      基本api操作:
 *          增加:
 *              put(k,v)    添加元素
 *          查找:
 *              isEmpty      判断是否为空
 *              size        返回map的大小
 *              containsKey
 *              containsValue
 *              get
 *          删除:
 *              clear 清空集合中的所有元素
 *              remove:删除指定元素
 *     Map.entry:表示的是K-V组合的一组映射关系,key和value成组出现
 *
 *     hashmap跟hashtable的区别:
 *      1、hashmap线程不安全,效率比较高,hashtable线程安全,效率低
 *      2、hashmap中key和value都可以为空,hashtable不允许为空
 *
 *
 *      hashmap初始值为2的N次幂,
 *          1、方便进行&操作,提高效率,&要比取模运算效率要高
 *              hash & (initCapacity-1)
 *          2、在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位是0或者是1即可
 *              如果是0,表示新数组和就数组的下标位置不变,如果是1,只需要将索引位置加上旧的数组的长度值即为新数组的下标
 *      1.7源码知识点:  数组+链表
 *          1、默认初始容量
 *          2、加载因子
 *          3、put操作
 *              1、设置值,计算hash
 *              2、扩容操作
 *              3、数据迁移的过程
 *      1.8源码知识点:   数组+链表+红黑树
 */

/**
 * @author: 马士兵教育
 * @create: 2019-09-21 20:09
 */

/**
 * map存储的是k-v键值对映射的数据
 *      实现子类:
 *          HashMap:数据+链表(1.7) 数组+链表+红黑树(1.8)
 *          LinkedHashMap:链表
 *          TreeMap:红黑树
 *
 *      基本api操作:
 *          增加:
 *              put(k,v)    添加元素
 *          查找:
 *              isEmpty      判断是否为空
 *              size        返回map的大小
 *              containsKey
 *              containsValue
 *              get
 *          删除:
 *              clear 清空集合中的所有元素
 *              remove:删除指定元素
 *     Map.entry:表示的是K-V组合的一组映射关系,key和value成组出现
 *
 *     hashmap跟hashtable的区别:
 *      1、hashmap线程不安全,效率比较高,hashtable线程安全,效率低
 *      2、hashmap中key和value都可以为空,hashtable不允许为空
 *
 *
 *      hashmap初始值为2的N次幂,
 *          1、方便进行&操作,提高效率,&要比取模运算效率要高
 *              hash & (initCapacity-1)
 *          2、在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位是0或者是1即可
 *              如果是0,表示新数组和就数组的下标位置不变,如果是1,只需要将索引位置加上旧的数组的长度值即为新数组的下标
 *      1.7源码知识点:  数组+链表
 *          1、默认初始容量
 *          2、加载因子
 *          3、put操作
 *              1、设置值,计算hash
 *              2、扩容操作
 *              3、数据迁移的过程
 *      1.8源码知识点:   数组+链表+红黑树
 */
public class MapDemo {

    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<String,Integer>(13);
        map.put("a",1);
        map.put("b",2);
        map.put("c",3);
        map.put("d",4);
        map.put(null,null);
        System.out.println(map);
        System.out.println(map.isEmpty());
        System.out.println(map.size());
//        map.clear();
        System.out.println(map.containsKey("a"));
        System.out.println(map.containsValue(2));
        System.out.println(map.get("a"));
        map.remove("a");
        System.out.println(map);

        //遍历操作
        Set<String> keys = map.keySet();
        for(String key:keys){
            System.out.println(key+"="+map.get(key));
        }

        //只能获取对应的value值,不能根据value来获取key
        Collection<Integer> values = map.values();
        for (Integer i:values){
            System.out.println(i);
        }

        //迭代器
        Set<String> keys2 = map.keySet();
        Iterator<String> iterator = keys2.iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println(key+"="+map.get(key));
        }
        //Map.entry
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        Iterator<Map.Entry<String, Integer>> iterator1 = entries.iterator();
        while (iterator1.hasNext()){
            Map.Entry<String, Integer> next = iterator1.next();
            System.out.println(next.getKey()+"--"+next.getValue());
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值