集合之Map(一)

1、什么是Map

Map是一种键值对(key,value)集合,Map集合中每一个元素都包含一个键对象和一个值对象。其中键对象不允许重复,值对象可以重复,并且值对象可以为任意类型,比如List,Map,Set,String 等等。  【将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值】

Map接口主要有两个实现类:HashMap 类和 TreeMap 类,其中,HashMap 类按哈希算法类存取键对象,而TreeMap 类可以对键对象进行排序。

 

2、Map常用接口

方法名称 说明
 V get(Object key)  返回指定键所映射的值,如果此映射不包含该键的映射关系,则返回null 。V 表示值的数据类型
 V put(K key, V value)  向Map 集合中添加键-值对,将指定的值与此映射中指定键关联
 V remove(Object key)  从Map 集合中删除key 对应的键-值对,返回key 的value 值,如果没有,则返回null 
 Set entrySet()  返回Map 集合中所有键-值对的Set 集合,此Set集合中的元素数据类型为 Map.Entry<,>
 Set ketSet()  返回Map 集合中所有键对象的Set 集合

 

 

 

 

 

 

 

 

3、Map的四种遍历方法

第一种(普遍使用,二次取值):

1 通过Map.keySet 遍历key 和value 
2 for (String key : map.keySet()) { 3 System.out.println("key= "+ key + " and value= " + map.get(key)); 4 }

第二种

1 通过Map.entrySet 使用iterator 迭代器遍历key 和value 
2 Iterator<Map.Entry<String,String>> iter = map.entrySet().iterator();
3 while(iter.hashNext()){
4     Map.Entry<String,String> entry = iter.next();
5     System.out.println("key = " + entry.getKey() + ",value = “ + entry.getValue());
6 }

 第三种:推荐,尤其是容量大时

1 通过Map.entrySet 遍历key 和value
2 for(Map.Entry<String,String> entry : map.entrySet()){
3     System.out,println("key = " + entry.getKey() + ", value = " + entry.getvalue());
4 }

第四种

1 通过map.values() 遍历所有的value,但不能遍历key
2 for(String value : map.values()){
3     System.out.println("value = " + value);
4 }

 释义:

Entry

Map中存放的元素均以键值对,故而每一个键值必然存在一个映射关系。

Map中采用Entry 内部类来表示一个映射项,映射项包含Key 和Value,故而键-值对 = Entry。 

Map.Entry 里面包含getKey() 和 getValue() 方法

entrySet

entrySet 是Java 中 键-值 对的集合,Set 里面的类型是Map.Entry,一遍可以通过map.entrySet 得到

entrySet 实现了Set 接口,里面存放的是键值对,一个K对应一个V,即通过getKey() 得到K,getValue() 得到V。

keySet

keySet 是键的集合,Set 里面的类型即key 的类型。

 

4、HashMap 和 HashTable 的区别

  • HashMap 允许key 或者 value 为null,HashTable 不允许。

     

  • HashMap 是线程不安全的,HashTable 是线程安全的,故而执行效率HashMap 比HashTable 高。【在多线程并发的环境下,可以直接使用HashTable,HashMap 需要同步处理】
  • HashMap 是重新计算hash值,而HashTable 是直接使用对象的hashCode , 哈希值的使用不同。
  • HashMap 中hahs 数组的默认大小是16,而且一定是2的指数,而HashTable 中hash 数组默认大小是11,增加的方式是 old *2+1。
  • HashMap 继承了AbstrcatMap 类,HashTable 继承了 Dictoinary ,但两者都实现了 Map 接口。 
  • HashMap 没有 contains() 方法,HashTable 中的contains()  与containsValue() 功能相同。
  • HashMap 和HashTable 都使用了itorator ,HashTable 还保留了 Enumetaion。

 

上一篇:entrySet() 详解以及(四种遍历map的方式)


下一篇:Codeforces 1132C - Painting the Fence - [前缀和优化]