好好温习下java容器类

容器类是什么?

如果你真的用java做过项目,那list和map你肯定用过很多了。我也是,但是我当我拿起书本才发现原来还有其他容器自己一直没用到。首先来了解下容器的概念吧。

容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。

以上是百度的概念。我觉得太复杂了。简单来说,当我们用一个对象来“存放”一组对象的时候,这个对象就是容器,而这一组对象就是容器里面的一个元素。所有的容器类都来自java.util包中。

容器的分类

容器还有分类吗?有的。容器有两大类,分别是Collection(集合)和Map(映像)。其中Collection存放的是独立的对象,Map存放的是一对的“键-值”对象。
代表对象集合的接口有:collection(抽象的集合),collection的2个子接口Set和List。
Map集合的接口有HashMap和TreeMap。关系如图所示:



List

List保存的是有序的可以重复的对象。List重载了add()和addAll()方法。有几个实现了这个接口的类:
AbstractList,ArrayList,LinkedList和Vector。我们经常使用的是ArrayList、LinkedList和Vector。
    ArrayList可以想象成一种可以自动增加容量可以存放不同类型对象的数组。
Vector和ArrayList很类似 ,它们最大的区别在于Vector是线程安全的,而ArrayList不是。因为这个Vector在执行效率上会比ArrayList低,所以在使用时如果不考虑多线程的问题,优先选择ArrayList是个好选择。
  而ArrayList和Vector采用的都是数组的形式来保存对象的,所以很大的缺点是对它们进行删除或者插入操作的时候非常麻烦。
 LinkedList将每个对象放在独立的空间中,在每个空间中还保存有下一个链接的索引,在Java中提供的是双向链接列表,所以它还保存着上一个链接的索引。在LinkedList中不支持快速随机访问,如果想访问LinkedList中的第N个元素,必须从头开始查找,然后跳过前面的N-1个原色。所以效率比较低下。

Set

Set接口与List接口不同的地方在于,它表示的是不重复的对象集合。
Set有AbstractSet、HashSet、LinkedHashSet、TreeSet这些子类。比较常用的是HashSet和TreeSet类,因为可以快速查找指定的对象。

Map

Map用于存储元素对,称作“”键“”和“值”。一个Map不能包含重复的键,每个键最多只能映射一个值。在Map中键和值的保存顺序不是它们的插入顺序。
Map用put(key,value)方法来添加一个值,用get(key)方法获取key键相关联的值。
containsKey(Object key)用来判断某个Key是否存在。
Map允许null作为一个值。

HashMap是Java为Map提供的实现类。是查询效率最高的Map。

Hashtable也是Map实现类。它们有两点典型的区别:
Hashtable是一个线程安全的Map实现,但是HashMap是线程不安全的实现。所以HashMap比Hashtable的性能要高一点。但是如果有多余的线程访问同一个Map对象时,使用Hashtable实现类比较好。
Hashtable不允许使用null作为key和value,如果尝试把null值放进Hashtable中,会产生NullPointException异常。但是HashMap可以使用null作为key或value。

感觉这篇博客写了好久。总结这些容器还是总结不完所有的细节,只是一些重点。先这样吧。以后在一篇博客讲解一个容器类比较好。

由于技术水平有限,如果文章中有错的地方,希望指出。如果有疑问,欢迎留言讨论。谢谢!

猜你喜欢

转载自blog.csdn.net/u010102390/article/details/51759558
今日推荐