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;
}