Java集合类。

    Java中的集合类是在是太丰富了,有常用的ArrayList、HashMap,也有不常用的Stack、Queue,有线程安全的Vector、HashTable,也有线程不安全的LinkedList、TreeMap,有阻塞式的ArrayBlockingQueue,也有非阻塞式的PriorityQueue等,整个集合家族非常庞大,而且也是错综复杂,可以划分为以下几类:

List

    实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。

    其中ArrayList是一个动态数组,LinkedList是一个双向链表,Vector是一个线程安全的动态数组,Stack是一个对象栈,遵循先进先出的原则。

Set

    Set是不包含重复元素的集合,其主要的实现类有:EnumSet、HashSet、TreeSet。

    其中EnumSet是枚举类型的专用Set,所有元素都是枚举类型;HashSet是以哈希码决定其元素位置的Set,其原理与HashMap相似,它提供快速的插入和查找方法;TreeSet是一个自动排序的Set,他实现了SortedSet接口。

Map

    Map是一个大家族,他可以分为排序Map和非排序Map,排序Map主要是TreeMap类,他根据Key值进行自动排序;非排序Map主要包括:HashMap、HashTable、Properties、EnumMap等。

    其中Properties是HashTable的子类,他的主要途径是从Property文件中加载数据,并提供方便的读写操作;Enum则是要求其Key必须是每一个枚举类型。

    Map中还有一个WeakHashMap类需要说明,他是一个采用弱键方式实现的Map类,他的特点是:WeakHashMap对象的存在并不会阻止垃圾回收器对键值对的回收,也就是说使用WeakHashMap装载数据不用担心内存溢出的问题,GC会自动删除不用的键值对,这是好事。但也存在一个严重问题:GC是静悄悄回收的(何时回收?God knows!),我们的程序无法知晓该动作,存在重大的隐患。

Queue

    队列,它分为两类,一类是阻塞式队列,队列满了以后再插入元素则会抛出异常,主要包括:ArrayBlockingQueue、PriorityBlockingQueue、LinkedBlockingQueue,其中ArrayBlockingQueue是一个以数组方式实现的有界阻塞队列,PriorityBlockingQueue是依照优先级组建的队列,LinkedBlockingQueue是通过链表实现的阻塞队列;另一类是非阻塞队列,无边界的,只要内存允许,都可以持续追加元素,我们经常使用的是PriorityQueue类。

    还有一种队列,是双端队列,支持在头、尾两端插入和移除元素,他的主要实现类是:ArrayDeque、LinkedBlockingDeque、LinkedList。

数组

    数组与集合的最大区别就是数组能够容纳基本类型,而集合就不行,更重要的一点就是所有的集合底层存储的都是数组。

工具类

    数组的工具类是java.util.Arrays和java.lang.reflect.Array,集合的工具类是java.util.Collections,有了这两个工具类,操作数组和集合会易如反掌,得心应手。

扩展类

    集合类当然可以自行扩展了,想写一个自己的List?没我呢提,但最好的办法还是“拿来主义”,可以使用Apache的commons-collections扩展包,也可以使用Google的google-collections扩展包,这些足以应对我们的开发需要。

猜你喜欢

转载自blog.csdn.net/en_joker/article/details/80510030