zoukankan      html  css  js  c++  java
  • 双列集合map面试题

    一.了解Map集合吗?Map集合都有哪些实现
      1.HashMap   HashTable    LinkedHashMap   TreeMap   ConcurrentHashMap
     
     二.HashMap和HashTable之间的区别

     HashMap不是线程安全的

                HashMap是map接口的子类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。

      HashTable是线程安全

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

      1.HashMap:底层基于数组+单向链表(红黑树),非线程安全,默认容量为16,允许有空的键和值
       数组:Node<K,V> [] table ,每一个元素都是一个Node
       单向链表:Node<K,V> next,当发生Hash碰撞,会追加链表,当链表长度大于8,那就转换为红黑树
      2.HashTable:底层基于哈希表实现,线程是安全的,默认容量为11,不允许有空的键和值
     
     三.hashCode()和equals()方法使用场景

    hashCode()方法用于获取给定对象的唯一的整数。当这个对象需要存储在哈希表这样的数据结构时,这个整数用于确定桶的位置。默认情况下,对象的hashCode()方法返回对象所在内存地址的整数表示。

    equals()方法用来简单验证两个对象的相等性。默认实现只检查两个对象的对象引用,以验证它们的相等性。

      hashCode():顶级父类Object当中的方法,返回值类型为int类型的值,根据一定的规则(存储地址,字段,长度等等)生成一个数组,数据保存的就是Hash值
      equals():顶级类Object中的方法,根据一定的比较规则,判断对象是否一致,底层一般逻辑:
       1.判断两个对象的内存地址是否一样
       2.非空判断和Class类型判断
       3.强转
       4.对象中的字段一一匹配
     
     四.HashMap和TreeMap应该如何选择

      HashMap:底层采用数组+链表(红黑树)结构,可以实现快速的存储和检索,但是数据是无序的,适用于在Map当中插入删除或者获取元素
      
      TreeMap: 存储结构是一个平衡二叉树,具体实现方式为红黑树,默认采用自然排序,可以自定义排序规则,但是需要实现Comparator接口
         能够便捷的实现内部元素的各种排序,但是性能比HashMap差,适用于按照自然排序和自定义排序规则
     

    TreeMap取出来的是排序后的键值对。插入、删除需要维护平衡会牺牲一些效率。但如果要按自然顺序或自定义顺序遍历,那么TreeMap会更好。
    HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap。HashMap通常比TreeMap效率要高一些,一个是哈希表,一个是二叉树,建议多使用HashMap,在需要排序的Map时候才用TreeMap。HashMap的查询速度比TreeMap要快


     五.Set和Map的关系
      Set核心就是保存不重复的元素,存储一组唯一的对象
      set当中每一种实现都对应Map
      HashSet对应的HashMap,TreeSet对应的TreeMap
     
     六.常见的Map排序规则
      按照添加规则使用LinkedHashMap,按照自然排序或者自定义规则排序可以采用TreeMap
     
     七.如何保证Map线程安全
      多线程环境下,可以使用concurrent包下有一个ConcurrentHashMap或者是使用Collections.synchronizedList(new HashMap<K,V>());
      
      ConcurrentHashMap保证线程安全,效率比HashTable高,采分段锁
      
     

  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/mayuan01/p/12506013.html
Copyright © 2011-2022 走看看