一、常用集合类对比和说明
集合类型主要有3种:set、list和map。
- ArrayList、LinkedList、Vector
ArrayList:
底层使用数组实现,遍历和追加元素速度快,中间插入和删除元素慢,线程不安全。
LinkedList:
采用双向链表实现(双向链表:每个元素中除了有数据以外,还需要存放上一个和下一个元素的引用),元素在空间中不连接,遍历慢,中间插入和删除速度快。
Vector:
集合的遗留类(Legacy)。底层也是使用数组实现,遍历和追加元素速度快,中间插入和删除元素,线程安全。.Vector是List集合中比较早期的实现,现在基本不用。
- HashMap 和 HashTable
HashMap:
HashMap是基于哈希表的Map接口的非同步实现,继承自AbstractMap,AbstractMap是部分实现Map接口的抽象类。HashMap采用数组+链表实现,线程不安全。
HashTable:
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value,线程安全。
- HashSet 和 TreeSet
HashSet:
HashSet简单的理解就是HashSet对象中不能存储相同的数据,存储数据时是无序的。但是HashSet存储元素的顺序并不是按照存入时的顺序(和List显然不同) 是按照哈希值来存的所以取数据也是按照哈希值取得
TreeSet
是一个有序的集合,它的作用是提供有序的Set集合。它继承了AbstractSet抽象类,实现了NavigableSet,Cloneable,Serializable接口。TreeSet是基于TreeMap实现的,TreeSet的元素支持2种排序方式:自然排序或者根据提供的Comparator进行排序。