概述
Java所有集合类都在java.util包下,支持并发的集合在java.util.concurrent(juc)包下。
集合与数组区别:
数组大小是固定的,集合大小可以根据使用情况进行动态扩容。
数组可以存放基本数据类型,集合只能存放引用数据类型。
Java中集合分为单列集合(实现Collection接口)和双列集合(实现Map接口)两种形式,常用集合框架图如下图所示:
Map集合
常用实现类有HashMap,HashTable,LinkedHashMap。
HashMap
HashMap底层原理实现请参考:。
底层是基于数组和链表/红黑树实现的(jdk8采用的红黑树结构)。
HashMap的key可以为null(因为key是不重复的所以只会仅存在一个),value可以存在多个null值。
HashMap是线程不安全的。
HashTable
底层数据和HashMap是一样的。
HashTable的key和value都不允许为null。
HashTable是线程安全的。
LinkedHashMap
LinkedHashMap 继承 HashMap,底层数据结构较HashMap多了一个双循环链表。
LinkedHashMap 是有序。
LinkedHashMap 的key可以为null(因为key是不重复的所以只会仅存在一个),value可以存在多个null值。
LinkedHashMap 是线程不安全的。
ConcurrentHashMap
ConcurrentHashMap是线程安全的,性能比HashTable好。
List集合
常用实现类有ArrayList,LinkedList。
ArrayList
ArrayList底层是基于数组实现的,查询快,增删慢。
ArrayList是线程不安全的,效率高。
LinkedList
LinkedList是基于链表实现的,查询慢,增删快。
LinkedList是线程不安全的,效率高。
Vector
Vector底层是基于数组实现的,查询快,增删慢。
Vector是线程安全的,效率低(很少使用,面试有时候会问到)。
Set集合
常用实现类有HashSet,TreeSet,LinkedHashSet。
HashSet
HashSet是无序的(底层是根据hash算法进行排序的,对于我们来说它不能按照插入顺序或者数据大小进行排序,所以我们称为无序)。
HashSet元素可以为null。
HashSet是线程不安全的。
LinkedHashSet
LinkedHashSet底层是基于链表和hash表实现的。
LinkedHashSet是有序的。
LinkedHashSet元素可以为null。
LinkedHashSet是线程不安全的。
TreeSet
TreeSet实现了SortedSet接口,采用的是红黑树算法进行排序的。
TreeSet是有序的。
TreeSet元素不能为null。
TreeSet是线程不安全的,
Queue队列
Queue是Java1.5开始引入的。常用实现类有ArrayQueue。
相关推荐
0评论