map的分类和常见的情况

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是最好的选择。

但是如果遍历数据的话,就需要根据实际情况考虑了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值