一、Map接口
1、Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象。
2、key-value,一一映射,一个键只能定义一个值。
3、Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的。
4、Map接口的两个实现:
(1)HashMap
基于哈希表的Map接口的实现。
key/value对是按照Hash算法存储的。
(2)TreeMap
基于树的实现。
key/value对是排序(按key的值进行排序简单的自然排序,只能是字母、数组的简单排序,但是对于中文就不能,必须采取其他的方法进行排序,其实也是按照其拼音进行的排序)存储的。
二、HashMap
1、基于哈希表的Map接口的实现。
2、key/value对是按照Hash算法存储的。
HashMap的常用方法
(一)赋值 :Object put( Object key,Object value)
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hmap=new HashMap();
//put():赋值
hmap.put(1, "星期一");
hmap.put(2, "星期二");
hmap.put(3, new java.util.Date());
//用new是为了节省数据从引用类型转换为基本数据类型的操作,但是结果还是一样的,没有任何区别
hmap.put(4, new Integer(30));
hmap.put(5, 30);
System.out.println(hmap);
}
}
(二)删除:Object remove(key )
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hmap=new HashMap();
//put():赋值
hmap.put(1, "星期一");
hmap.put(2, "星期二");
hmap.put(3, new java.util.Date());
//用new是为了节省数据从引用类型转换为基本数据类型的操作,但是结果还是一样的,没有任何区别
hmap.put(4, new Integer(30));
hmap.put(5, 30);
System.out.println(hmap);
//remove():删除
//删除 key=1的值
hmap.remove(1);
//删除 key=3的值
hmap.remove(3);
System.out.println(hmap);
}
}
(三)查询
1、Object get(Object key )
返回此映射中映射到指定键的值,即操作key得到value。
i
mport java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hmap=new HashMap();
//put():赋值
hmap.put(1, "星期一");
hmap.put(2, "星期二");
hmap.put(3, new java.util.Date());
//用new是为了节省数据从引用类型转换为基本数据类型的操作,但是结果还是一样的,没有任何区别
hmap.put(4, new Integer(30));
hmap.put(5, 30);
System.out.println(hmap);
//获取key为1的value值
System.out.println(hmap.get(1));
//获取key为3的value值
System.out.println(hmap.get(3));
}
}
2、boolean containsKey(Object key)
若此映射包含指定键的映射关系,返回true,否则返回false。
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hmap=new HashMap();
//put():赋值
hmap.put(1, "星期一");
hmap.put(2, "星期二");
hmap.put(3, new java.util.Date());
//用new是为了节省数据从引用类型转换为基本数据类型的操作,但是结果还是一样的,没有任何区别
hmap.put(4, new Integer(30));
hmap.put(5, 30);
System.out.println(hmap);
//判断此映射是否包含key为2的映射关系,有地话返回true,没有的话返回false
System.out.println(hmap.containsKey(2));
System.out.println(hmap.containsKey(10));
}
}
3、boolean containtsValue(Object value)
若此映射为指定值映射一个或多个键,返回true。
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hmap=new HashMap();
//put():赋值
hmap.put(1, "星期一");
hmap.put(2, "星期二");
hmap.put(3, new java.util.Date());
//用new是为了节省数据从引用类型转换为基本数据类型的操作,但是结果还是一样的,没有任何区别
hmap.put(4, new Integer(30));
hmap.put(5, 30);
System.out.println(hmap);
//判断此映射是否包含values为"星期一"的映射关系,有地话返回true,没有的话返回false
System.out.println(hmap.containsValue("星期一"));
//判断此映射是否包含values为"40"的映射关系,有地话返回true,没有的话返回false
System.out.println(hmap.containsValue(40));
}
}
4、Set keySet( )
返回此映射中包含的键的set视图,即获取所有的key放在set视图中。
/*
* 获取所有的key的值放在set视图中,并打印出所有的key和value
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
HashMap hmap=new HashMap();
//put():赋值
hmap.put("1", "星期一");
hmap.put("2", "星期二");
hmap.put("3", new java.util.Date());
//用new是为了节省数据从引用类型转换为基本数据类型的操作,但是结果还是一样的,没有任何区别
hmap.put("4", new Integer(30));
hmap.put("5", 30);
System.out.println(hmap);
/*
* 获取所有的key的值放在set视图中,并打印出所有的key和value
*/
//创建对象
Set keyset=hmap.keySet();
//创建迭代器
Iterator iter=keyset.iterator();
/*
* 循环打印
*/
//如果存在有下一个值,则执行循环体的语句
while(iter.hasNext())
{
//强制转换为String类型,key的值必须要定义为String类型才能进行该强制转换
String key=(String) iter.next();
//输出key和value
System.out.println("key"+key+" value:"+hmap.get(key));
}
}
}
三、TreeMap
1、TreeMap基于树的实现。
2、key/value对是排序(按key的值进行排序简单的自然排序,只能是字母、数组的简单排序,但是对于中文就不能,必须采取其他的方法进行排序,其实也是按照其拼音进行的排序)存储的。
3、如果要使用到一些简单的自然排序时会采用TreeMap,其他的方法和使用与HashMap一样。
4、TreeMap实现自然排序实例
/*
* 测试TreeMap的自然排序
*/
import java.util.TreeMap;
public class TestTreeMap {
public static void main(String[] args) {
//创建对象
TreeMap map=new TreeMap();
//通过map对象调用put()方法进行赋值
map.put(1, "星期一");
map.put(2, "星期二");
map.put(5, new java.util.Date());
map.put(4, new Integer(30));
map.put(3, "中国人");
//打印
System.out.println(map);
}
}
四、HashMap与TreeMap的比较
1、HashMap基于哈希表实现的,而TreeMap基于树实现的。
2、HashMap可以通过调优初始容器和负载因子,优化HashMap使用。而TreeMap没有调优选项,因为概树总处于平衡状态。
3、HashMap性能优于TreeMap。
五、HashMap与Hashtable的比较
1、Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现。
2、Hashtable是线程安全的,也就是说是同步的,而HashMap是线程不安全的。不是同步的。
3、HashMap允许将null作为一个entry的key或者value。而Hashtabel不允许。