Map源码扩容机制特点接口三种遍历

Map接口有哪些特点

在开发中使用的很多

使用的是jdk8的接口的特点

1)Map与Collection 并列存在 用于保存具有映射关系的数据 Key-Value

2)Map中的key和value可以是任何引用类型数据 会封装到HashMapNode中对象中

3)Map中的key不允许重复 原因和hashSet一样

4)Map中的value 可以重复

5)Map的key可以为null,value 也可以为null,注意key为null 只能有一个

value为null 可以为null value也可以为null 注意key为null 只能又有一个

value为null 可以为多个

6)常用String类可以作为Map的key

  1. key和value 之间存在单向一对一关系 即通过指定的key总能找到对应的value

在这里插入图片描述
存的是node

package com.company.Collection.Map_;

import java.util.HashMap;
import java.util.Map;

public class Map_ {
    public static void main(String[] args) {
        //Map 接口实现类的特点  实现类HashMap
        //1、Map与Collection并列存在用于保存具有映射关系的数据
        //2、Map与key和value 可以是任何引用类型的数据 会封装到HashMap node 对象中

        Map map = new HashMap();
        map.put("no1","soyadios");
        map.put("no2","soyadios");
        map.put("no1","zjq");
        map.put("no3","soyadios");
        map.put(null,null);
        map.put(null,"abc");
        map.put("no4",null);
        map.put("no5",null);
        map.put(1,"赵敏");
        map.put(new Object(),"");
        System.out.println("map="+map);
    }
}
//1、k-v 最后是HashMapnode  node  = newNode(hash,key,value,null)
//2、k-v 为了方便程序遍历 花卉创建entrySet集合,该集合存放的元素的类型是Entry 而一个Entry
//3、entrySet中  定义的类型是Map.Entry 但实际上HashMapNode
// 这时因为static class Node<K,V> implements Map.Entry<K,V>
//4、当把hashMapnode 对象存放到entrySet 就方便我们遍历  因为Map.entry 提供了重要的方法
//K getKey

在这里插入图片描述

Map接口和常用方法

在这里插入图片描述

在这里插入图片描述

8)Map接口的特点

Map数据的key-value 一对k-v 是放在一个HashMapNode 中的

因为node 实现了entry接口

在这里插入图片描述

Map接口遍历方法

Map遍历方式

1)containKey:查找键的存在

2)keySet:获取所有的键

3)entrySet:获取键的所有关系K-V

4)values:获取所有的值

Map遍历 以hashmap 为例

package com.company.Collection.Map_;

import java.util.*;

@SuppressWarnings({"all"})
public class MapFor {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("A","AA");
        map.put("B","BB");
        map.put("C","CC");
        map.put("D",null);
        map.put(null,"DD");
        map.put("E","EE");


        //第一组   先取出 所有的key,通过key 取出对应的value
        Set keyset= map.keySet();

        //(1)增强for
        System.out.println("--------第一种方式-----------");
        for (Object key:keyset) {
            System.out.println(key+"-"+map.get(key));
        }
        //(2)迭代器
        System.out.println("----------第二种方式------------");
        Iterator iterator = keyset.iterator();
        while (iterator.hasNext()){
            Object next = iterator.next();
            System.out.println(next+"-"+map.get(next));
        }
        //(3)   把所有的values取出

        //第二组
        Collection values = map.values();
        //(1) 增强for
        System.out.println("------取出-----------");
        for (Object value:values) {
            System.out.println(value);
        }
        //(2)迭代器
        System.out.println("取出所有的value迭代器");
        Iterator iterator2 = values.iterator();
        while (iterator2.hasNext()){
            Object value = iterator2.next();
            System.out.println(value);
        }

        //第三组:通过EntrySet 来获取k-v
        Set entrySet = map.entrySet();
        //(1) 增强for
        for (Object entry: entrySet) {
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey()+"-"+m.getValue());
        }
        //(2)迭代器
        System.out.println("----使用EntrySet 的for增强(第四种)");
        Iterator iterator3 = entrySet.iterator();
        while (iterator3.hasNext()){
            Object next = iterator3.next();
//            System.out.println(next.getClass()); //HashMap$Node -实现-> Map.Entry(getKey,getValue)
        //向下转型 Map.Entry
            Map.Entry m = (Map.Entry) next;
            System.out.println(m.getKey()+"--"+m.getValue());
        }

    }
}
package com.company.Collection.Map_;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapSource_ {

    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1","zjq");
        map.put("no2","skh");

        //1、k-v 最后是HashMapnode  node  = newNode(hash,key,value,null)
        //2、k-v 为了方便程序遍历 花卉创建entrySet集合,该集合存放的元素的类型是Entry 而一个Entry
        //3、entrySet中  定义的类型是Map.Entry 但实际上HashMapNode
        // 这时因为static class Node<K,V> implements Map.Entry<K,V>
        //4、当把hashMapnode 对象存放到entrySet 就方便我们遍历  因为Map.entry 提供了重要的方法
        //K getKey
        Set set = map.entrySet();
        System.out.println(set.getClass());
        for (Object obj:set) {
            Map.Entry entry = (Map.Entry) obj;
            System.out.println("key=");
        }


    }
}

= map.entrySet();
System.out.println(set.getClass());
for (Object obj:set) {
Map.Entry entry = (Map.Entry) obj;
System.out.println(“key=”);
}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值