选择接口的不同实现

选择接口的不同实现

容器之间的区别是归结为由什么在背后支持他们。如,ArrayList和LinkedList都是list接口,因此无论选择哪个,基本的List操作都是相同的。然而,ArrayList底层有数组支持而LinkedList是由双向链表实现,其中的每个对象包括数据的同时还包括指向链表的前一个与后一个袁术的引用。因此如果要经常在表中插入或删除元素,LinkedList就合适,否则应该使用速度更快的ArrayList。
又如Set可以分为TreeSet、LinkedHashSet、HashSet。HashSet最常用,查询速度更快,LinkedHashSet保持元素插入的次序,TreeSet基于TreeMap生成一个总是还处于排序状态的Set。

对List的选择

对Set的选择

在这里插入图片描述
在这里插入图片描述在这里插入图片描述HashSet的性能基本总是比TreeSet好,TreeSet存在的唯一原因为他可以维持元素的排序状态,所以只有当需要一个排好序的Set时,才应该使用TreeSet。因为其内部结构支持排序,并且因为迭代是我们更可能执行的操作,所以用TreeSet比HashSet快。

对于Map的选择

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
除了IdenttiyHashMap,所有的Map实现的插入操作都会随着Map尺寸的变大而明显变慢。Hashtable的性能大体上与HaahMap相当。因为HashMap是用来代替Hashtable的,一次你使用了相同的底层存储和查找机制。
TreeMap一般比HashMap要慢,与使用TreeSet一样,TreeMap是一种创建有序列表的方法。树的行为是:总是保证有序的,并且不必进行特殊的排序,一旦填充了一个TreeMap就可以调用KeySet()方法来获得取键的Set视图,然后调用toArray()产生有这些键构成的数组。然后可以使用静态方法Arrays.binarySearch()在排序数组中快速查找对象。
LinkedHashMap在插入时比HashMap慢一点,因为维护散列数据结构的同时还要维护链表。
IdentityHashMap则具有完全不同的性能,使用==而不是equals()来比较元素。

  • HashMap性能因子:
    容量:表中的桶位数。
    初始容量:表在创建时所拥有的桶位数。HashMap和HashSet都具有允许你指定初始容量的构造器。
    尺寸:表中当前存储的项数。
    负载因子:尺寸/容量,空表的负载因子是0,半满表的负载因子是0.5.负载轻的表产生冲突的可能性小,因此对与插入和查找是理想的。HashMap和HashSet都具有允许你指定负载因子的构造器表示当负载情况达到该负载因子的水平时容器将自动增加其容量,实现方式是使用容量大致加倍,并重新将现有的对象分布到新的桶位集中。
    HashMap使用的默认负载因子为0.75(只有当表达到是四分之三满时,进行再散列),这个因子在时间和空间代价之间达到平衡。更高的负载因子可以降低表所需的空间,但是会增加查找的代价。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值