概述
Map是个接口,他有四个常用的实现类:HashTable、HashMap、TreeMap、LinkedHashMap
Map主要用于存储键值对,根据键得到值,因此不允许键重复(如果重复的话,后插入的键值对会覆盖原先的通名的键值对),但是值允许重复。
HashMap:
HashMap根据键的hashcode值存储数据,大多数情况下可以直接定位到值,所以访问速度很快;它是无序存储数据的,所以遍历顺序不确定;HashMap最多只允许有一个记录的键为null,可以允许多个记录的值为null;HashMap非线程安全,不支持线程同步(线程同步:在一个线程访问内存的时候,其他的线程不可以对这个内存进行操作,必须等待这个线程操作结束,其他线程才能对该内存进行操作),如果同时有多个线程操作HashMap,可能会导致数据不一致;如果需要同步,可以使用Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
HashMap的遍历速度和它的容量有关。
HashTable:
HashTable和HashMap比较相似,但是它是继承Dictionary类,并且它是线程安全的,因此HashTable写入速度较慢。它
不允许键或值为null。建议使用HashMap,之前从哪里看到过,HashMap就是为了替代HashTable的。如果需要同步,就使用ConcurrentHashMap。
LinkedHashMap:
LinkedHashMap是HashMap的子类,保存了记录的插入顺序,使用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的数据,也可以在构造的时候带参数,按照访问次序排序。
LinkedHashMap的遍历速度只和实际数据有关。
遍历数据,如果需要输出的顺序和输入的顺序相同,可以选择 LinkedHashMap。
TreeMap:
TreeMap实现了SortedMap,顾名思义,它是按照一定顺序存储数据的,他能够把保存的记录根据键排序,默认是根据键升序排序,也可以指定排序的比较器;用Iterator遍历TreeMap时,得到的数据是排好序的。如果需要排序的映射,建议使用TreeMap。TreeMap的key必须实现Comparable接口或者在构造TreeMap时传入自定义的Comparator,否则会报ClassCastException类转换异常。
在实际情况中,HashMap是最常用的,因为在Map中插入,删除,定位元素,HashMap是最好的选择。
但是如果遍历数据的话,就需要根据实际情况考虑了。
最后
以上就是甜美香烟为你收集整理的map的分类和常见的情况HashMap:HashTable: LinkedHashMap:TreeMap:的全部内容,希望文章能够帮你解决map的分类和常见的情况HashMap:HashTable: LinkedHashMap:TreeMap:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复