你不知道的Java学习笔记18--Map

来源:互联网 发布:激光亚克力切割机软件 编辑:程序博客网 时间:2024/06/05 07:11

一、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不允许。

1 0
原创粉丝点击