Java 集合框架总述
集合框架
集合也就是用于储存数据的容器。主要用于"替代"对象个数不确定的数组。
集合用于存储对象,集合区别于数组,原因是集合长度可变。
集合容器有多种,因为容器自身特点不同,内部数据结构不同,形成了容器的体系。
1,集合框架体系:
如图:
Java集合主要分为:Collection,map接口。
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。
Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。
2,数组和集合的区别
数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
数组长度是固定的,不能自动增长。
集合的长度的是可变的,可以根据元素的增加而增长。
3,接口与他的子接口们
Collection接口有List和Set两个子接口。
|-- List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|-- Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。
List(常见的):
LinkList类
实现了List接口,线程不同步,允许为null的元素。
LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
ArrayList类
ArrayList实现了可变大小的数组,线程不同步。它允许所有元素,包括null。
随着不断添加新元素可自动增加,但是增长算法没有定义。需要插入大量元素时,在插入前可以调用ensureCapacity方法增加ArrayList的容量以提高插入效率。
Vector类
Vector非常类似ArrayList,但是Vector是线程同步的。
Stack类
Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。
基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。
Set(常见的):
set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
Map(常见的):
HashTable:
Hashtable继承Map接口,是线程同步的,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。
注:如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题:要同时复写equals方法和hashCode方法,而不要只写其中一个。
HashMap:
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,
HashSet: