基本概念
在Java语言中,java.util.Map接口是集合框架的顶层接口之一
java.util Map<K , V>接口中存放元素的基本单位是单对元素(K 用于描述键(Key)的类型,V 用于描述值(Value)的类型)
该接口的主要实现类:HashMap 类和TreeMap类
该接口中Key(键)不允许重复,而且每个Key(键)只能对应一个Value(值)
问:HashMap类和Hashtable的区别?
答:它们均为Map接口的实现类
Hashtable类属于早期的类,是线程安全的类,效率较低
HashMap类属于后增加的类,是线程不完全的类,非线程安全的类,效率比较高
常用的方法
- V put(K key , V value)
— 用于将Key和Value 组成一对放入当前集合中
— 若实现增加功能则返回null,若实现修改功能则返回原来的Value
//1、声明Map类型的引用指向实现类的对象,形成多态
Map<Integer,String> m1 = new HashMap<Integer,String>();
//2、向集合中增加元素
String str1 = m1.put(1,"one");
Ststem.out.println("str1 = " + str1); //null
//自动调用toString()方法,调用HashMap中的toString()方法
//默认打印格式为:{键1 = 值1,键2 = 值2,...}
System.out.println("m1 = " + m1); //{1 = one}
//增加元素
str1 = m1.put(2,"two");
System.out.println("str1 = " + str1); //null
System.out.println("m1 = " + m1); //{1 = one,2 = two}
//修改元素
str1 = m1.put(1,"eleven");
System.out.println("str = " + str1); //one
System.out.println("m1 = " + m1); //{1 = eleven,2 = two}
- boolean contains Key(Object key)
用于判断当前集合中是否存在参数指定的key - boolean containsValue(Object value)
用于判断当前集合中是否存在参数指定的value - v get(Object key)
用于根据参数指定的key返回对应的value,若key不存在则返回null - v remove(Object key)
用于根据参数指定的key来删除键值对,返回该key对应的value - Set <Map.Entry<K,V>> entrySet()
— 用于将Map集合转换为Set集合,集合中的每个元素都是键值对
— 其中Map.Entry是接口类型,常用方法有:
(1)K getKey( ) — 用于获取键值对中的键
(2)V getValue( ) — 用于获取键值对中的值 - Set keySet( )
用于将Map集合中所有的键放入Set集合中并返回
遍历Map集合中所有的元素
//实现Map集合所有元素的遍历
//方法一:调用toString()方法
//参考上述代码
//方法二:调用entrySet()方法
//实现Map集合转向Set集合
Set <Map.Entry<String,String>> s1 = m1.entrySet();
for(Map.Entry<String,String> me:s1){
System.out.println(me.getKey() + "=" + me.getValue());
}
//方法三:调用keySet()方法
//实现Map集合中所有的key转换为Set集合
Set<String> s2 = m1.keySet();
//使用for each打印Set集合的所有元素
for(String ts : s2){
System.out.println(ts + "=" + m1.get(ts));
}