java中三种容器接口List .Set .Map 及其java容器总结

本文提供了Java集合框架中List、Set、Map等容器的最佳实践。包括ArrayList与LinkedList的选择依据、不同Set类型的适用场景以及HashMap与TreeMap之间的权衡。同时对比了Vector、Hashtable等过时容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.对 List 的选择

 

 ArrayList 和LinkedList 都实现了List 接口,Vector 也是,不过已经废弃了。首选 ArrayList。

 

2 ,对 Set 的选择,

 

可以选择 TreeSet、HashSet,或者LinkedHashSet。HashSet 的性能总是比TreeSet 好(特别是最常用的添加和查询元素操作)。TreeSet存在的唯一原因是,它可以维持元素的排序状态。所以,只有当你需要一个排好序的Set时,才应该使用TreeSet。

注意,对于插入操作,LinkedHashSet 比HashSet 略微慢一点;这是由维护链表所带来

额外开销造成的。不过,因为有了链表,遍历LinkedHashSet 会更快

 

 

3,对 Map 的选择          

对 Map 不同的实现做选择时,Map 的大小是影响性能最重要的因素,

Hashtable 和HashMap 的效率大致相同。(你也看到了,HashMap 通

常更快一点,所以HashMap 有意取代Hashtable。)TreeMap 通常比HashMap 慢,

为什么还需要它?因为可以使用它生成一个排好序的队列。树的行为方式是:它总是处于

排序状态,不需要专门进行排序操作。当TreeMap 被填充之后,就可以调用keySet(),

取得由“键”组成的Set,然后使用toArray()生成“键”的数组。接下来使用static

Arrays.binarySearch()方法(稍后会讨论),在已排序的数组中快速地查询对象。当然,

你应该只在因为某些原因而无法使用HashMap 的时候,才去这么做。因为HashMap 正

是为快速查询而设计的。而且,你可以很方便地通过TreeMap 生成HashMap。所以,当

你需要使用Map 时,首选HashMap,只有在你需要一个总是排好序的Map 时,才使用

TreeMap。

LinkedHashMap 比HashMap 慢一点,因为它维护散列数据结构的同时还要维护链表。

IdentityHashMap 则具有完全不同的性能,因为它使用==而不是equals()来比较元素     。

 

 

java容器总结:

 

1. 数组将数字与对象联系起来。它保存类型明确的对象,查询对象时,不需要对
结果做类型转换。它可以是多维的,可以保存基本类型的数据。但是,数组
一旦生成,其容量就不能改变。
2.Collection 保存单个的元素,而Map 保存相关联的键值对。
3.像数组一样,List 也建立数字与对象的关联,可以认为数组和List 都是排好序
的容器。List 能够自动扩充容量。但是List 不能保存基本类型,只能保存Object
的引用,因此必须对从容器中取出的Object 结果做类型转换。
4.如果要进行大量的随机访问,就使用ArrayList;如果要经常从List 中间插入或

  删除元素,则应该使用LinkedList。
5. 队列、双向队列以及栈的行为,由 LinkedList 提供支持。
6.Map 是一种将对象与对象相关联的设计。HashMap 着重于快速访问;TreeMap
保持“键”始终处于排序状态,所以没有HashMap 快。LinkedHashMap 保
持元素插入的顺序,也可以使用LRU 算法对其重排序。
7. Set 不接受重复元素。HashSet 提供最快的查询速度,TreeSet 保持元素处于排
序状态。LinkedHashSet 以插入顺序保存元素。
8.新程序中不应该使用过时的 Vector、Hashtable 和Stack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值