参考博客(博主记载很详细,值得学习):https://blog.csdn.net/f45056231p/article/details/81047081
一、Collection<接口>
- List:有序(元素存入集合的顺序和去除的顺序一致),元素都有索引,允许重复元素。
①子类一Vector:底层的数据结构是可变长度的数组。线程同步,增删和查询都很慢。
②子类二ArrayList:底层的数据结构是可变长度数组。线程不同步,替代了Vector,增删速度不快。查询速度很快(因为在内存中是连续空间)。
③子类三LinkedList:底层的数据结构是链表,线程不同步。增删速度很快。查询速度较慢(因为在内存中需要一个个查询,判断地址来寻找下一元素)。
2.Set:无序(存入和取出顺序可能不一致),不允许重复元素,必须保证元素的唯一性。
①子类一:HashSet,底层的数据结构是哈希表(散列表)。无序,比数组查询效率高,线程不同步。
根据哈希表冲突的特点,为了保证哈希表中元素的唯一性。
该容器中存储元素所属的类应该复写Object类中的hashCode、equals方法。
HashSet的子类:LinkedhashSet:有序
②TreeSet:底层数据结构是二叉树。可以对Set集合的元素按照指定规则进行排序。线程不同步。
add方法新添加元素必须可以同容器已有的元素进行比较,
所以元素所属类应该事先Comparanle接口的compareTo方法,以完成排序。或者添加Comparator比较器,实现compare方法。
二、Map<K, V>接口
1、子类一Hashtable:底层是哈希表数据结构,线程同步,不允许存储null键和null值。
Hashtable子类Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合
2、子类二HashMap:底层是哈希表数据结构,线程不同步,允许存储null键和null值,替代了HashTable
3、子类三TreeMap:底层是二叉树结构。线程不同步。可以对map集合中的键进行指定顺序排序。
注意:HashSet和TreeSet底层是使用HashMap和TreeMap实现的,值操作键,就是Set集合。