Map 接口
常用方法
- public V put(K key,V value);重复返回被替换的值,不重复返回null
 - public V remove(Object key);返回被删除的key对应的value,如果不存在key,返回null
 - public V get(Object key)//返回key对应的value,如果不存在key,返回null
 - boolean containsKey(Object key)//存在key返回true,不存在返回false
 
HashMap实现了Map接口
- 多线程集合,速度快
 
遍历方法
-  
keySet()//键的集合
-  
//以set集合方式返回map所有的key;使用迭代器或者增强for循环去遍历
 -  
for(K key in map.keySet()){
System.out.println(map.get(key));
 -  
}
 
 -  
 -  
Map.Entry<K k,V v> //键值对
-  
Map接口中的Entry接口,为键值对接口
 -  
Map集合创建的的时候会创建的Entry对象,记录键与值
 -  
Set<Map.Entry<K,V>> entrySet() //返回键值对对象
 -  
示例
 -  
Set<Map.Entry<String,Interger>> kv=Map.entrySet(); for (Map.Entry<String, Interger>> k :kv){ System.out.println(k.getKey()+"="+k.getValue()) } 
 -  
 -  
HashMap存储自定义对象需要维持key的唯一,因此需要重写equals和hashCode方法
 
LinkHashMap继承自HashMap,方法相同,但LinkHashSet可以记录元素的顺序
HashTable
-  
实现了Map接口,key’和value都不允许存储null值,其他类型可以
 -  
@since JDK1.0
 -  
同步单线程的
 -  
1.2之后被主流行HashMap
 -  
Vector也是1.2之后被ArrayList所取代
 -  
底层是个哈希表
 -  
HashTable的子类Properties是一个唯一和IO流相结合的集合
 
Map集合练习
- 统计用户输入字符的个数
 
public static int count(String s){
   
        Map<Character,Integer> m=new HashMap<>();
        for (int i=0;i<s.length();i++){
   
            if(m.get(s.charAt(i))==null){
   
                m.put(s.charAt(i),1);//不存在该键,m增加该键并赋值为1
            }else{
   
                int value=m.get(s.charAt(i));//
                value++;
                m.put(s.charAt(i),value);
            }
        }
        for(Character c: m.keySet()){
   
            System.out.println(c+"="+m.get(c));
        }
        return 0;
    }

京公网安备 11010502036488号