Java集合大致可以划分成单列数据模式;和键值对两列数据模式。

1、  单列数据模式:

 

(1)       ArrayList类实现了List接口,在java1.2新增的实现类,实质上是一个动态数组,存储的数据可以重复。默认情况下初始化capacity为10,如果添加过程中超过该容量会自动扩容。因为是一个数组,所以可以通过index来获取和插入数据。这个类提供的方法是非线程安全的,如果只有一个线程调用ArrayList对象效率较高,在多线程情况下就需要自行实现线程同步。

(2)       Vector类实现了List接口,在java发布就带有该类,内部实质上也是一个动态数组。这个类和ArrayList类有相似之处,只是这个类中的方法是线程安全的,如果是多线程情况下使用该类的对象,不需要在外部实现线程同步。

(3)       LinkedList类也实现了List接口,这个类实质上是一个链表,内部通过定义Node对象来实现链表的连接。因为LinkedList类实质是一个链表,所以不能像数组那样通过index来获取集合中的元素,一般通过Iterator来迭代获取。

(4)       HashSet类实现了Set接口,内部存储实质是Map结构数据,这个集合类与ArrayList类不同点时,不能向HashSet集合中添加重复的数据。因为HashSet类内部是Map结构,所以也不能通过index方式来获取数据,不过可以通过Iterator来迭代获取,该集合中的方法是非线程安全的。

(5)       TreeSet类实现了Set接口,这个类和HashSet类区别在于存储数据是否排序,TreeSet类的数据是有序存储的。

(6)       LinkedHashSet类也实现了Set接口,并继承了HashSet类。

2、键值对模式

  

    (1)HashTable类,在jdk1.0时已经有这个类,线程安全,key值唯一,且不能为null;

 (2)HashMap类,在jdk1.2发布这个接口,非线程安全。key值唯一,可以为null;