Java 常用类库 collection

一、collection 集合

1.1 Collection 接口是在整个 Java 类集中保存单值的最大操作父接口,里面每次操作的时候都只能保存一个对象的数据。 此接口定义在 java.util 包中。

1.2 此接口定义如下:
public interface Collection extends Iterable
此接口使用了泛型技术,在 JDK 1.5 之后为了使类集操作的更加安全,所以引入了泛型。

1.3 常用方法:

java类库帮助文档中文下载 java类库手册_子类


二、List子接口

2.1 在整个集合中 List 是 Collection 的子接口,里面的所有内容都是允许重复的.

2.2List子接口定义:
public interface List extends Collection

2.2 在 List 接口中有以上 10 个方法是对已有的 Collection 接口进行的扩充.

java类库帮助文档中文下载 java类库手册_子类_02


List接口有比collection更多的操作方法,它有三个实现类(子类):

ArrayList(95%)、Vector(4%)、LinkedList(1%)

三、ArrayList实现类(子类)

1.1 ArrayList是List的子类,其定义如下:

public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable
此类继承了 AbstractList 类。AbstractList 是 List 接口的子类。AbstractList 是个抽象类,适配器设计模式。

1.2 数据结构
ArrayList 使用的是数组结构,增加删除慢, 但是查找快.

1.3 创建方式:

ArrayList<引用数据类型> 类名称 = new ArrayList<引用数据类型>();

1.4 三个构造方法

(1) 无参的构造方法:构造一个初始容量为10的空列表。

(2) ArrayList(int initialCapacity) :构造具有指定初始容量的空列表。

(3) ArrayList(Collection<? extends E> c) :按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

四、vector实现类(子类)

1.1 与 ArrayList 一样,Vector 也属于 List 接口的子类,其定义为:

public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable
此类与 ArrayList 类一样,都是 AbstractList 的子类。所以,此时的操作只要是 List 接口的子类就都按照 List 进行操作。

1.2 四个构造方法

(1)无参的构造方法:
构造一个空向量,使其内部数据数组的大小为 10 ,其标准容量增量为零。

(2)Vector(int initialCapacity)
构造一个具有指定初始容量且容量增量等于零的空向量。

(3)Vector(int initialCapacity, int capacityIncrement)
构造具有指定初始容量和容量增量的空向量。

(4)Vector(Collection<? extends E> c)
按照集合的迭代器返回的顺序构造一个包含指定集合元素的向量。

1.3 Vector与ArrayList的区别:
这两个类虽然都是 List 接口的子类,但是使用起来有如下的区别:
(1)时间: ArrayList 是新的类,是在 JDK 1.2 之后推出的.
Vector是旧的类是在 JDK 1.0 的时候就定义的 .

(2) 性能: ArrayList 性能较高,是采用了异步处理.
Vector 性能较低,是采用了同步处理

(3) 输出: ArrayList支持 Iterator、ListIterator 输出 .
Vector 除了支持 Iterator、ListIterator 输出,还支持 Enumeration 输出 .

五、LinkList实现类(子类)

1.1 此类的使用几率是非常低的,类的定义如下:
public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, Serializable

1.2 数据结构:
采用的双向链表结构,增、删快,但是查找慢。

1.2 特点:
可以模拟栈、队列来使用。

六、Set集合

1.1 跟List接口的区别:
Set 接口也是 Collection 的子接口,与 List 接口最大的不同在于,Set 接口里面的内容是不允许重复的。
Set 接口并没有对 Collection 接口进行扩充,基本上还是与 Collection 接口保持一致。
因为此接口没有 List 接口中定义 的 get(int index)方法,所以无法使用循环进行输出。 在此接口中有两个常用的子类:HashSet、TreeSet 。
所有Set集合中内部都有Map(映射)存储。

1.2 HashSet(实现类)
   散列存放,无序。(哈希表HashMap)
   
   1.3 TreeSet 和 Comparable
   1.Treeset为二叉树存储、有序、自然顺序。
   2.Comparable
   用于设置排序标准

七、Map集合
1.Map集合的特点

1.1存储内容为一个个键值对
   1.2.每个值只有一个对应的键,且键不能重复。
   1.3.keySet()方法,返回映射中的键的set视图
   1.4.put(K key, V value)方法,将指定键与指定的值关联
   1.5.remove(Object key)/ remove (K key , V value) 删除取出。

2.哈希表概述

2.1哈希表又叫散列表
   哈希表 = 对象数组 + 链表
   哈希桶中的链表长度大于8时,链表会转换为红黑二叉树,当数据量小于6时,
   又会从红黑二叉树转换为链表。
   2.2哈希桶的默认数值
   初始桶数为:16 ,散列因子:0.75.当有75%的桶存上了数据时就会对哈希桶
   进行扩容,容量为原来的两倍。

3.Map集合应用实例
3.1HashMap、Hashtable、ConcurrentHashMap的区别
线程安全:
HashMap 线程不安全 、效率高
Hashtable 线程安全、效率低
ConcurrentHashMap 分频段操作、既安全效率又高。