目录
集合框架图
List
定义
有序集合(也称为序列 )。 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素
继承关系
--Iterable
--Collection
--List
--ArrayList
--LinkedList
ArrayList
基于数组实现。
优点:基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的,可以直接返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。
缺点:删除数据却是开销很大的,因为这需要移动数组中插入位置之后的的所有元素
LinkedList
基于双向链表实现,并且实现了Deque接口,可以作为队列使用。
优点:随机访问集合元素时性能较差,因为需要在双向列表中找到要index的位置,再返回
缺点:因为只需要修改对应节点前后的引用,在插入,删除操作是很快
Set
定义
不包含重复元素的集合,允许null
继承关系
--Iterable
--Collection
--Set
--HashSet
--LinkedHashSet
--TreeSet
HashSet
根据hashcode散列存储,对迭代次序不做任何保证,线程不安全
优点:性能相对较快
缺点:无序
LinkedHashSet
根据hashcode散列存储并且使用TreeMap记录数据的插入顺序,对迭代次序有保证,线程不安全
优点:有序(按照插入顺序)
缺点:性能相对较慢
TreeSet
实现了Set的SortSet接口,使用者可以自定义排序规则,并使用LinkedHashMap记录记录顺序,线程不安全
优点:自定义排序
缺点:性能相对较慢
Map
定义
存储key-value映射关系的数据集合
继承关系
--Iterable
--Collection
--Map
--HashMap
--LinkedHashMap
--TreeMap
HashMap
根据键的HashCode 值无序存储数据,允许null,HashTable不允许,线程不安全(ConcurrentHashMap线程安全)
优点:性能快
缺点:迭代时无序
LinkedHashMap
保存了插入信息的先后顺序,允许null,线程不安全
优点:有序(按照插入顺序排序)
缺点:性能相对较慢
TreeMap
实现了Map的SortMap接口,按照插入数据的键值进行升序进行存储,线程不安全
优点:有序(按照键值进行排序)
缺点:操作性能慢
ps: Map如果需要按照value进行排序时,需要先将Map转换成List<Map.Entery<KetType, ValueType>>,然后在对list进行排序
List的排序代码:
Collections.sort(new ArrayList<T>(), new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
return 0;
}
});