首页 > 其他分享 >hashmap,hashtabl,hashtree,linkedhashmap区别分析

hashmap,hashtabl,hashtree,linkedhashmap区别分析

时间:2023-03-20 21:06:30浏览次数:35  
标签:hashtree 遍历 hashmap TreeMap 线程 Hashtable hashtabl LinkedHashMap HashMap


java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列.

标签:hashtree,遍历,hashmap,TreeMap,线程,Hashtable,hashtabl,LinkedHashMap,HashMap
From: https://blog.51cto.com/u_3871599/6138606

相关文章

  • Java HashMap为什么线程不安全
    一、学习目标1、HashMap线程不安全原因:原因:JDK1.7中,由于多线程对HashMap进行扩容,调用了HashMap#transfer(),具体原因:某个线程执行过程中,被挂起,其他线程已经完成数据迁......
  • hashmap get、put时间复杂度
    在JDK8之前用单链表HashMap作为一个桶来储存存在哈希碰撞的元素。无论是get还是put方法,步骤都可以分为第一步找桶(找桶时间都为O(1),可以忽略),第二步在桶内进行操作(查找或......
  • JUC源码学习笔记8——ConcurrentHashMap源码分析1 如何实现低粒度锁的插入,如何实现统
    源码基于jdk1.8这一片主要讲述ConcurrentHashMap如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移系列文章目录和关于我一丶ConcurrentHashMap概述......
  • ConcurrentHashMap 的实现方式?
    ConcurrentHashMap的实现方式和Hashtable不同,不采用独占锁的形式,更高效,其中在jdk1.7和jdk1.8中实现的方式也略有不同。Jdk1.7中采用分段锁和HashEntry使锁更加......
  • HashMap正确遍历方式,千万不要再forforfor啦!!!
    for(inti=0;i<map.size();i++){if(map.get(i)/n>=0.01){num++;}}上述代码报空指针异常。为什么?循环......
  • 谈谈ConcurrentHashMap是如何保证线程安全的?
    jdk1.7中是采用Segment+HashEntry+ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node+CAS+Synchronized来保证并发安全进行实现......
  • C++中的HashTable性能优化
    C++中的HashTable性能优化-知乎https://zhuanlan.zhihu.com/p/614105687C++中的HashTable性能优化腾讯技术工程​编程话题下的优秀答主​关注 72......
  • HashMap和HashTable的区别?
    HashMap不是线程安全的,HashTable是线程安全的。HashMap允许nullkey和nullvalue,而HashTable不允许HashMap把Hashtable的contains方法去掉了,改成containsV......
  • HashMap为啥不能用基本类型作为key值
    java中,为什么基本类型不能做为HashMap的键值,而只能是引用类型,把引用类型作为HashMap的键值首先,HashMap存储数据的特点是:无序、无索引、不能存储重复元素。其次,存......
  • 你能谈谈HashMap怎样解决hash冲突吗
    在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。HashMap采用一种所谓的“Hash算法”来......