Map接口

Map接口是Java中保存二元偶对象,也就是键值对(key-value)的最顶层接口。

1.Map接口的核心方法:

  • public V put(K key,V value):向Map中添加数据
  • public V get(K key):根据指定的key值取得相应的value值,若没有key值,返回null
  • public Set<Map.Entry<K,V>> entrySet():将Map集合变为Set集合
  • public Set keySet():返回所有key值集合,key不能重复
  • public Collection values():返回所有value值,value可以重复

2.Map集合的遍历:
Map集合不可以直接使用迭代器遍历输出,而是要先变为Set集合再遍历输出,如下:

public static void main(String[] args) {
        Map<Integer,String> hashMap = new HashMap<>();
        hashMap.put(1,"1");
        hashMap.put(5,"2");
        hashMap.put(3,"3");
        hashMap.put(null,"1");
        hashMap.put(null,null);
        Set<Map.Entry<Integer,String>> set = hashMap.entrySet();
        Iterator<Map.Entry<Integer,String>> iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }

结果如下:

在这里插入图片描述
默认采用key=value的格式输出集合,若想要输出key值或value值,可以使用getKey()与getValue()。

3.Map接口下的三大常用子类:

  • HashMap:
public static void main(String[] args) {
        Map<Integer,String> hashMap = new HashMap<>();
        hashMap.put(1,"1");
        hashMap.put(5,"2");
        hashMap.put(3,"3");
        hashMap.put(null,null);
        hashMap.put(null,"5");
        Set<Map.Entry<Integer,String>> set = hashMap.entrySet();
        Iterator<Map.Entry<Integer,String>> iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

结果如下:
在这里插入图片描述

  • TreeMap:
    若将上述代码改为TreeMap,会有NullPointerException异常,说明key值不能为空。
    我们插入这几条数据看一下结果:
    在这里插入图片描述
    在这里插入图片描述
    可见,TreeMap实现了有序存储。

  • HashTable:
    将上部分代码改为Hashtable,发现也会有空指针异常,此时的key和value都不能为空,故我们只插入前三条数据即可,结果如下:
    在这里插入图片描述

4.HashMap、TreeMap、Hashtable的区别与联系:

  • HashMap、TreeMap、Hashtable都是Map接口的常用子类。
  • HashMap出现于JDK1.2,基于哈希表+红黑树实现;
    TreeMap出现于JDK1.2,基于红黑树实现;
    Hashtable出现于JDK1.0,基于哈希表实现。
  • HashMap采用懒加载策略,初始化哈希表为16,但其实真正容量是12;采用异步处理,线程不安全,效率较高;
    TreeMap采用异步处理,线程不安全,效率较高
    Hashtable产生对象时初始化内部哈希表为16,采用方法上synchronized加锁,线程安全,性能很低。
  • HashMap允许key值与value值为空;
    TreeMap允许value值为空;
    Hashtable的key与value都不能为空。

5.判断两个对象是否相等:
Object类提供的hashCode()其实是为了获取对象的哈希值,用于确定该对象在哈希表中的索引位置。

若两个对象的equals()返回true,那么他们的hashCode()一定会返回true;
若两个对象的hashCode()返回true,他们的equals()不一定会返回true。

所以,当且仅当equals()与hashCode()都返回true时,认为两个对象真正相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值