javaSE-15-map集合相关操作

  • Map
    • java.util.HashMap散列表,查询速度最快
      • V put(K k,V v) 增
      • V get(Object key) 得
      • V remove(Object key) 删 
      • boolean containsKey(Object key)包含key
      • boolean containsValue(Object value)包含value
    • java.util.TreeMap二叉树
/**
 * Map查找表
 * Map体验的结构是一个多行两列的表格,其中左列称为key,右列称为value
 * Map总是成对保存数据,并且总是根绝key获取对应的value。因此我们可以将查询的条件作为key
 * 查询对应的结果作为value保存到Map中
 * Map有一个要求:key不允许重复(equals比较的结果)
 * java.util.Map接口,是所有Map的顶级接口,规定了Map的相关功能
 *
 * 常用实现类
 * java.util.HashMap:称为散列表,使用散列算法实现的Map,当今查询速度最快的数据结构
 *      根据key查询value 查询速度最快的数据结构
 * java.util.ThreeMap:使用二叉树实现的Map
 *
 */
public class MapDemo {
    public static void main(String[] args) {
        /*
            v put(K k,V v)
            将给定的键值对存入Map中,由于Map要求key不允许重复,
            若使用已有的key存入value时,则为替换value操作,
            返回值为原value。否则返回值为null
         */
        Map<String,Integer> map = new HashMap<>();
        map.put("语文",98);
        map.put("数学",99);
        /*
            注:
                如果Map的value 是包装类型时,在接收value值的时候一定用包装类类型的变量接收
                避免因为自动拆箱出现的空指针异常
         */
        Integer i1 = map.put("英语",100);
        System.out.println(i1);//null
        map.put("自然与科学",100);
        System.out.println(map);
        //注意:不要用int接受,时Integer int会报空指针
      //  int num = map.put("化学",99);//编译器不会出错,运行期用int接收会有空指针异常,因为没有做替换,返回的是null,null报的空指针
        //int num = map.put("h",99).intValue();这里会自动拆箱,所以编译不会报错
        Integer i = map.put("英语",65);
        System.out.println(i);//100

        /*
            V get(Object key)
            根据给定的key获取对应的value,如果给定的key不存在,则返回值为null
         */
        i = map.get("语文");
        System.out.println(i);//98
        i = map.get("体育");
        System.out.println(i);//null

        /*
            V remove(Object key)
            删除给定的key对应的键值对,返回值为该key对应的value
         */
        System.out.println(map);//{自然与科学=100, 数学=99, 语文=98, 英语=65}
        i = map.remove("语文");
        System.out.println(i);//98
        System.out.println(map);//{自然与科学=100, 数学=99, 英语=65}

        //每组键值对算一个元素,Collection有的方法,它都有
        int size = map.size();
        System.out.println(size);

        /*
            boolean containsKey(Object key)
            boolean containsValue(Object value)
         */
        boolean ck = map.containsKey("语文");//判断集合是否包含key
        boolean cv = map.containsValue(97);//判断集合是否包含value
        System.out.println(ck);
        System.out.println(cv);

    }
}
  • Map遍历:
    • 1、遍历key
    • 2、遍历value
    • 3、有个entry接口遍历键值对的:每一个entry是一对key value,所以也需要指定泛型,和键值对一致就可以了
      • 相当于map有几组键值对,就有几个entry
      • 调用evtrySet 的时候,返回一个Set集合
      • 遍历键值对也支持lamdba表达式,但是它的这个表达式不像集合,集合就一个元素,直接 list.foreach(k->) 就一个元素
      • 而map里面的元素是一个key,一个value,所以需要给两个值 map.forEach((k,v)-> System.out.println(k+","+v));
**
 * map的遍历
 * Map支持三种遍历方式
 * 1、遍历所有的key
 * 2、遍历所有的键值对
 * 3、遍历所有的value(不常用)
 */
public class Demo2 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("语文",98);
        map.put("数学",99);
        map.put("化学",101);

        //遍历key 用set接收,更贴切,不允许重复
        Set<String> keySet = map.keySet();
        keySet.forEach(key-> System.out.println(key));
        for(String key : keySet){
            System.out.println(key);
        }

        /*
            遍历每一组键值对
            Set<Entry> entrySet()
            将当前Map中每一组键值对以一个Entry实例保存并最终存入Set集合后返回。
            java.util.Map.Entry
            Entry的每一个实例表示一组键值对。提供了两个常用方法:
            k getKey()
            v getValue()
         */
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        for(Map.Entry<String,Integer> e :entrySet){
            String key = e.getKey();
            Integer value = e.getValue();
            System.out.println(key+" ,"+value);
        }
        entrySet.forEach(enrty-> System.out.println(enrty));
        /*
            JDK8之后,Map也提供了forEach方法,用lambda表达式遍历
         */
        map.forEach((k,v)-> System.out.println(k+","+v));

       /*
            遍历所有的value
            Collection<V> values()
            将当前Map中所有的value以一个集合形式返回
        */
        Collection<Integer> values = map.values();
        values.forEach(v-> System.out.println(v));
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值