Java集合(容器)框架 00 - 概括

2019-03-30  本文已影响0人  L2先森

前言

关于Java集合框架(Java Collections Framework, JCF)的资料较于C++的STL少之甚少,JCF的设计参考了STL,但其定位不是Java版的STL,而是要实现一个精简紧凑的集合框架,STL的教程/资料不能替代对JCK。

以下笔者阅读《Java编程思想》第11章和第17章,以及网上的参考资料(见参考资料),梳理、深入理解Java集合框架。

容器,就是可以容纳其他Java对象的对象。Java Collections Framework(JCF)为Java开发者提供了通用的容器,其始于JDK 1.2,优点是:

在Java 2之前,Java是没有完整的集合框架的。它只有一些简单的可以自扩展的容器类,比如Vector,Stack,Hashtable等。这些容器类在使用的过程中由于效率问题饱受诟病,因此在Java 2中,Java设计者们进行了大刀阔斧的整改,重新设计,于是就有了现在的集合框架。需要注意的是,之前的那些容器类库并没有被弃用而是进行了保留,主要是为了向下兼容的目的,但我们在平时使用中还是应该尽量少用。

正文

容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。

集合接口

集合接口

Map接口没有继承自Collection接口,因为Map表示的是关联式容器而不是集合。但Java为我们提供了从Map转换到Collection的方法,可以方便的将Map切换到集合视图。 上图中提供了Queue接口,却没有Stack,这是因为Stack的功能已被JDK 1.6引入的Deque取代。

集合实现

上述接口的通用实现见下表:

集合实现

Collection

  1. List: 存储一组不唯一(可以有多个元素引用相同的对象),有序的对象。
  1. Set: 不允许重复的集合。不会有多个元素引用相同的对象。
  1. Queue: 先进先出(FIFO)的容器

Map

使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。

集合的选用方式: 主要根据集合的特点来选用,比如我们需要根据键值获取到元素值时就选用Map接口下的集合,需要排序时选择TreeMap,不需要排序时就选择HashMap,需要保证线程安全就选用ConcurrentHashMap.当我们只需要存放元素值时,就选择实现Collection接口的集合,需要保证元素唯一时选择实现Set接口的集合比如TreeSet或HashSet,不需要就选择实现List接口的比如ArrayList或LinkedList,然后再根据实现这些接口的集合的特点来选用。

课后作业

参考文献:
上一篇下一篇

猜你喜欢

热点阅读