java容器类类库的用途是保存对象。Java集合框架中主要有两种容器:Collection和Map。集合框架包括以下三个内容:接口、类、算法。接口是集合抽象的数据类型。类是接口的具体实现。算法是对象的方法的一些计算。
集合框架图如下:
图中符号意义:
接口:用短线虚线框表示
抽象类:用长虚线
类:用实线框表示
接口和接口之间的实现:用虚线和空白三角表示
类与类之间,以及类与接口之间的实现:用实线和空白三角
produce关系-即之间有关系,但并非直接实现:虚线和实心三角
集合接口:
集合接口 | 描述 |
---|---|
Collection | 最基础的集合接口,存储不唯一,无序的对象 |
List | 存储不唯一,有序的对象 |
Set | 存储的对象是唯一的,无序的 |
Map | 存储一组键值对 |
Queue | 队列,先进先出 |
SortedSe | 继承Set接口,元素是有序的 |
SortedMap | 按key值升序排列 |
Map.Entry | 描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。 |
... | ... |
List查找效率高,Set查找效率低,List删除和插入效率低,Set删除和插入效率高。
数组和集合区别:数组的长度是固定的,集合长度不固定。数组只能保存基本类型和对象。集合可以保存对象和基础类型的包装类。
Map和List 以及Set并不是同级关系。List 和Set是Collection的子接口,Map并不属于Collection接口系列。
集合抽象类:
集合抽象类 | 描述 |
---|---|
AbstractCollection | 实现了大部分的集合接口 |
AbstractList | 继承于AbstractCollection 并且实现了大部分List接口 |
AbstractSet | 继承于AbstractCollection 并且实现了大部分Set接口 |
... | ... |
集合具体类:
集合具体类 | 描述 |
---|---|
ArrayList | 实现了List接口,实现了长度可变的数组 |
HashSet | 实现了Set接口,存储是唯一的,无序的元素,可最多有一个null元素 |
TreeSet | 实现了Set接口,可以用来实现排序等功能 |
HashMap | 实现了Map接口,可根据键的hashcode值存储元素,可最多有一个null键 |
TreeMap | 继承了AbstractMap |
LinkedHashMap | 继承于HashMap,使用元素的自然顺序对元素进行排序 |
HashTable | Hashtable继承于Dictionary类,实现了Map接口Hashtable 的函数都是同步的 |
Vector | 该类和ArrayList非常相似,但是该类是同步的,可以用在多线程的情况,该类允许设置默认的增长长度,默认扩容方式为原来的2倍 |
Stack | 栈是Vector的一个子类,它实现了一个标准的后进先出的栈 |
迭代器:
主要用于遍历Collection集合中的元素,使你能够通过循环来得到或删除集合的元素。
泛型方法:
在调用这个接口的时候可以使用不同的参数类型。注意类型参数只能代表引用型类型,不能是基础类型。
public static < E > void printArray( E[] inputArray )
{
// 输出数组元素
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
泛型类
public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
有了Java泛型,可以指定容器存放对象类型。
例如:
List<String> name = new ArrayList<String>();
List<Integer> age = new ArrayList<Integer>();
List<Number> number = new ArrayList<Number>();
参考链接:http://www.runoob.com/java/java-collections.html
http://www.cnblogs.com/buwuliao/p/9305377.html
https://blog.csdn.net/a2011480169/article/details/52047600