一、集合类简介

    集合类的由来:

     对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。

就使用集合容器进行存储

    集合特点:

     1.用于存储对象的容器

     2.集合的长度可变

     3.集合中不可以存储基本数据类型

    集合与数组的区别:

     集合是可变长度的,而数组时不可变的

二、Java提供的集合类的基本架构

    常用的就这两个接口,当然类可不止这些。

    |--Collection接口(单列集合)

|--List接口

|--ArrayList

|--LinkedList

|--Set接口

|--HashSet

|--LinkedHashSet

|--TreeSet

|--Map接口(双列集合)

|--HashMap

|--LinkedHashMap

|--TreeMap

|--Hashtable

|--Properties

三、Collection接口

    集合层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 

collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。

JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 SetList)实现。此接口通常用来传递 

collection,并在需要最大普遍性的地方操作这些 collection。 

    Collection接口的常用方法:

    

    1.添加。

     boolean add(Object obj);

     boolean addAll(Collection coll);

    

    2.删除。

     boolean remove(Object obj);

     boolean removeAll(Collection coll);

     void clear();

    

    3.判断:

     boolean contains(Object obj);

     boolean containsAll(Collection coll);

     boolean isEmpty();判断集合中是否有元素。底层是size()。

    

    4.获取:

     int size();

     Iterator iterator();取出元素的方式:迭代器

    

    5.其它:

     boolean retainAll(Collection coll);取交集。

     Object[] toArray()将集合转成数组。

四、List接口

    他是Collection接口的子接口,它的最大特点是具有角标,因此该集合数据的插入是有序的,

并且可以根据角标精确控制数据的位置。下面是它的实现类的比较:

    |--Vector:内部是数组数据结构,是同步的,几乎不用了。 jdk1.0出现的 两倍延长(增删查询都很慢)

|--ArrayList:内部是数组数据结构,是不同步的。替代了Vector。 1.5倍延长(增删速度比较慢,查

找速度很快)

|--LinkedList:内部是链表数据结构,是不同步的。(增删快,查找慢)LinkedList也是有角标的,因为

他是List接口的子类,List最大的特点就是有角标

五、set接口

    也是Collection集合的子接口,它不具有角标,数据也是无序的,并且元素不允许重复。下面是他的实现

类:

    |--HashSet:内部数据结构是哈希表,是不同步的。

    确定元素是否相同:

(1):判断两个元素的哈希值是否相同。如果相同,再判断两个对象的内容是否相同

注:判断哈希值相同,其实判断的是对象的hashcode()的方法。判断内容相同,用的是equals方法

注意:如果哈希值不同,是不需要判断equals的

哈希冲突:哈希值相同,内容不同。哈希会进行顺延存储或者重新算一个位置进行存储

     |--TreeSet:

     它的底层是二叉树,使用元素的自然顺序进行排序,是不同步的

     存自定义对象时必须实现Comparable接口

     判断元素的唯一性方式:就是根据返回值来判断,如果返回为0就视为元素相同

    

     TreeSet对元素进行排序的方式一:

     让元素自身具备比较功能,就需要实现Comparable接口。覆盖comparaTo方法

        TreeSet集合的排序方式二:

        让集合自身具备比较功能,使用比较器,定义一个类实现Comparator接口,覆盖compare方法,将该类对象作为参数

        传递给TreeSet集合的构造函数

    |--LinkedHashSet:有序且不重复。是HashSet的扩展

六、Map接口

    一次添加一对元素。Collection一次添加一个元素,Map也称为双列集合。Collection也称为单列集合

其实Map集合中存储的就是键值对,Map集合中必须保证键的唯一性。下面是他的实现类:

    |--Hashtable:内部结构是哈希表,是同步的。不允许null作为作为

|--Properties:一般用于存储配置文件的键和值。十分常用

|--HashMap:内部结构是哈希表,不是同步的。允许null作为键作为值

        |--LinkedHashMap:内部结构为链表加哈希表,有序,怎么存进去怎么取出来

|--TreeMap:内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序