Java集合——Map接口

在这里插入图片描述

Map接口类的介绍

  • HashMap:map接口中最常用的类,线程不安全的,效率高,可以在key或value上存储null
  • LinkedHashMap:在HashMap上基础上新增了两个变量,用于指向前一个元素或后一个元素,在遍历操作比较频繁的时候,LinkedHashMap效率比HashMap高
  • TreeMap:保证按照添加(key-value)的顺序进行排序,使用自然排序或者定制排序,底层实现原理:红黑树
  • Hashtable:map接口中最古老的类,线程安全,效率低,不能在key或value上存储null
  • Properties:常用来处理配置文件,key和value储存类型为String

Map接口结构的理解

  • 与y=f(x)做比较,key相当于x,是唯一的,而value相当于y,是可重复的
  • key:无序的,不可重复的,用set来存储 -------使用自定义类时需要重写equals()和hashcode()
  • value:无序的,可重复的,使用Collection来存储 -------使用自定义类时需要重写equals()
  • 键值对:(key - value)构成一个Entry对象
  • entry:无序的,不可重复的,使用set来存储所有的entry

分析HashMap的实现原理

  • DEFAULT_INITIAL_CAPACITY:HashMap默认容量:16
  • DEFAULT_LOAD_FACTOR:HashMap默认加载因子:0.75
  • threshold:扩容的临界值,容量*加载因子:12
  • TREEIFY_THRESHOLD:链表中的长度大于该默认值,转化为红黑树:8
  • MIN_TREEIFY_CAPACITY:数组的长度大于该默认值,转化为红黑树:64

JDK7:数组+链表
在这里插入图片描述

JDK8:数组+链表+红黑数

在这里插入图片描述

LinkHashMap实现原理

  • 重写了HashMap中newNode方法
  • 新建一个Entry内部类继承Node
  • 新增了before、after两个变量用于存储前一个对象和后一个对象
static class Entry<K,V> extends HashMap.Node<K,V> {
        Entry<K,V> before, after;
        Entry(int hash, K key, V value, Node<K,V> next) {
            super(hash, key, value, next);
        }
    }

如何遍历Map(以HashMap为例)

  • keySet():遍历key值
  • values():遍历value值
  • entrySet():遍历key-value
@Test
    public void test01(){
        HashMap map = new HashMap();
        map.put("name","大白");
        map.put("age",21);
        map.put("sex",true);

        //遍历key值
        Set set = map.keySet();
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
        System.out.println();

        //遍历value值
        Collection coll = map.values();
        for (Object obj: coll) {
            System.out.println(obj);
        }
        System.out.println();

        //遍历key-value
        Set entrySet = map.entrySet();
        Iterator iterator1 = entrySet.iterator();
        while (iterator1.hasNext()){
            System.out.println(iterator1.next());
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值