Java 常用类库 collection
一、collection 集合
1.1 Collection 接口是在整个 Java 类集中保存单值的最大操作父接口,里面每次操作的时候都只能保存一个对象的数据。 此接口定义在 java.util 包中。
1.2 此接口定义如下:
public interface Collection extends Iterable
此接口使用了泛型技术,在 JDK 1.5 之后为了使类集操作的更加安全,所以引入了泛型。
1.3 常用方法:
二、List子接口
2.1 在整个集合中 List 是 Collection 的子接口,里面的所有内容都是允许重复的.
2.2List子接口定义:
public interface List extends Collection
2.2 在 List 接口中有以上 10 个方法是对已有的 Collection 接口进行的扩充.
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 分频段操作、既安全效率又高。