- Map引入
示例:添加数据,把一些人的qq号码和密码统一保存到一个集合容器中,使用哪种方式存储比较好。
比如 qq账号, 密码
624029037 123456
624029038 123456
624029039 123456
分析: 选择ArrayList,还是LinkedList 哪个好呢?下面有6个数据,放到ArrayList里面容器比较容易,但是取出来,是不是不方便;感觉这六个数据都是配套使用的. 他们是一个整体,像这样的结构选择什么样存储,使用Map
- Map介绍
Map map = new HashMap();
1)Map :将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
2)现在需要创建一个Map对象,装里面的数据,但是发现Map是接口,应该怎么创建对象?
3)使用实现类 HashMap 创建对象
4)put方法的使用:
put(K key, V value) 在此映射中关联指定值与指定键。
put方法特点:
1.如果key不存在,直接添加进去
2.如果key相同,value值使用最新的值替换key对应的老值,put方法会返回 对应key之前存入旧值 - Map中常用方法
1.entrySet() 返回Set,(返回当前Map中所有的entry对象,使用Set存储起来。)
2.keySet() 返回Map当中所有的key,存储到一个Set集合当中。
3.values() 返回所有的values,存储到一个Collection。
4.Collection get(Object key) 返回Collection,通过key查找对应的值。 - Map方法的使用
同过查API,一些常用的方法
1.boolean containsKey(Object key) 如果此映射包含对于指定键的映射关系,则返回 true。
2.boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
3.get(Object key) 返回指定键所映射的值。(通过键得到值)
4.putAll(Map<? extends K,? extends V> m) 将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系。(相当于Collection下面的addAll,把另外一个Map放到当前Map的容器里面)
5.remove(Object key) 从此映射中移除指定键的映射关系(通过key ,找到value,然后把一对键和值都删掉)。 - Map的遍历方式
方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用 - 方式二 在for-each循环中遍历keys或values
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet - 该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
方式三 使用Iterator遍历:
使用泛型: - 不适用泛型:
- 你也可以在keySet和values上应用同样的方法。
该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。
从性能方面看,该方法类同于for-each遍历(即方法二)的性能。
方式四 通过键找值遍历(效率低)
总之 Map中的键–值是一一对应的,操作对象就是在操作数据,通过方法的调用/遍历/与其它类的对象的配合使用等等,操作数据实现达到想要的目的