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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值