集合框架:
所有的集合都是直接或者间接实现了Collection接口或Map接口
Collection接口下的集合继承体系:
List接口继承于Collection接口,同时也有实现类实现了这个接口,分别是:
①ArrayList:底层是对象数组集合,是定容的,可以扩容。同时也是有序的,查询数据速度快,但是插入数据速度慢,是线程不安全的,但是效率快,适用于多线程;
jdk1.5以后,可以使用Collections类中的synchronizedList方法,让ArrayList变成线程安全的集合;
②Vector:底层也是对象数组集合,也是有序的,但是Vector只适合于单线程,效率慢,是线程安全的,不推荐使用;
③LinkedList:底层是双向数据链表,同时LinkedList还实现了Deque接口,所以它还具有队列的功能。没有固定容量,不需要扩容,但也是有序的,查询数据速度慢,但是插入数据速度快的。
Set接口也是继承于Collection接口,同时也有实现类实现了这个接口,分别是:
①HashSet:是hashMap的实例,底层也是hash表,所以存入的元素不能重复,并且是无序的。线程不安全,存取速度快,通过对象的hashcode和equals方法来保证对象的唯一性。
②TreeSet:可以对集合中的数据进行排序,底层是二叉树,保证数据唯一性的方法是:compareTo()方法
排序是按照字母的ASCII码排序。
③LinkedHashSet:底层是hash表和链表,有序,无索引,并且存入的元素不可重复(去重的同时还可以保证元素的有序性)
Map接口下的集合继承体系:
实现了Map接口的实现类分别是:
①HashMap:底层是数组结构,同时数组中每一项又都是一个链表。因为HashMap也是数组结构,所以也是定容的,如果需要扩容,必须满足当前已有元素大于阈值和存放数据时发生了hash碰撞。同时hashMap是线程不安全的,并且允许有null值和null键。
②HashTable:实现原理和hashMap一致,但不同的是hashTable是线程安全的,并且hashTable不允许有null键和null
③TreeMap:底层是红黑树,所有的元素都保持着固定的顺序,查找,插入元素速度快,同时也是线程不安全的。
学无止境,砥砺前行~~