ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[toc] # 一、map概述 map接口实现的是一组key-value<b>键值对</b>的组合。map中的每一个成员方法由一个关键字(key)和一个值(value)构成。map接口的集合中不能有重复的key出现。 另外,set接口的底层是基于hashmap实现的。<b>set中存储的值,其实就是map中的key</b>,它们是不允许重复的。 为了更好了解map,需要了解hash算法:[http://www.cnblogs.com/xiohao/p/4389672.html](http://www.cnblogs.com/xiohao/p/4389672.html) 已知的常用map实现类有:hashmap、hashtable、linkedhashmap、treemap ## 1-1 map的映射的特点 1.一个映射不能包含重复的键; 2.每个键最多只能映射一个值; 3.键(key)只允许一个空值,值(value)可以有多个空值 4.map是无序的 ## 1-2 map的API 这里需要注意的是map中添加元素用的是put方法 ![](https://img.kancloud.cn/9d/3b/9d3bb1f20c0ecfe31715160dd56f33aa_787x645.png) # 二、hashmap ## 2-1 hashmap初始化 hashmap实现了map、clonemap、serializable三个接口,并且继承自abstractmap类。 hashmap基于<b>hash数组</b>实现,若key的hash值相同则使用链表的方式进行存储。![](https://img.kancloud.cn/8f/0f/8f0f5d45b6de2eceab5f61ee826b399c_656x291.png) 新建一个hashmap时,默认的话为初试一个大小为16,负载因子为0.75的空的hashmap ~~~ /** * Constructs an empty <tt>HashMap</tt> with the default initial capacity * (16) and the default load factor (0.75). */ public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted } ~~~ ## 2-2 hashmap常用API ### get(Object key) get方法是返回指定键所映射的值,返回的是value值。 ~~~ value=hashmap.get(key);//一般在遍历循环里写 ~~~ ### keySet() 返回此映射中所包含的键(key)的 Set 视图。返回值为一个set集合 ~~~ Set<E> set = map.keySet(); ~~~ ## 2-3 遍历hashmap 1.使用for循环 ~~~ public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("白日鼠", "白胜"); map.put("豹子头", "林冲"); map.put("小诸葛", "富安"); //1.获取一个map集合的key的set集合 Set<String> strings = map.keySet(); //2.遍历map集合,通过上一步获取的set集合遍历的key找出value for(String key:strings){ String value = map.get(key); System.out.println(key+"-->"+value); } } ~~~ 2.使用迭代器 ~~~ //1.先拿到map的所有key值 Set<String> set = map.keySet(); //2.把key值传入迭代器 Iterator<String> iterator = set.iterator(); String key; String value; while(iterator.hasNext()){ key=iterator.next(); value=map.get(key); System.out.println(key +"-->"+value); } ~~~