Collection(接口):
List:有序集合,可存放重复数据(存进什么顺序,取出什么顺序)
ArrayList:底层数组,线程不安全,查找效率高,快速访问,适合查询,有序可重复
LinkedList:底层双向链表,线程不安全,增删效率高,随机访问,适合增删,有序可重复
Vector:底层数组,线程安全,效率低,有序可重复
Set:无序集合,不允许存放重复数据(存进和取出顺序不一样)
HashSet:底层数组+链表+红黑树,无序不可重复
TreeSet:底层红黑树,并且实现SortedSet接口,可对元素排序(存进的元素可以按照元素大小自动排序),无序不可重复
List为Collection增加很多方法可以用for遍历,Set与Collection完全一致,Set采用迭代器遍历,检索效率低,删除插入效率高,且位置不变
Map(接口):一个无序集合,以键值对方式存放数据,键对象不允许重复,值对象可以重复
HashMap:底层数组+链表+红黑树,实现不同步,线程不安全,无序存放,key不重复,key-value存储在Entry中,HashMap基于哈希表实现,可以插入为null的key或value,插入的时候检查是否已经存在相同的key
若不存在,直接插入;若插入,则新的value替换旧的value。
TreeMap:底层红黑树,线程不安全,按key排序,key不重复
HashTable:线程安全,无序存放,key不重复
IdentityHashMap:key可重复,允许key与value都为null,无序线程不安全
WeakHashMap:弱引用的Map集合
List(接口)继承Collection(接口)有序可重复
Set(接口)继承Collection(接口)无序不可重复
Collection是List和Set的父接口,一般不会直接使用
线程安全的Map:HashTable、SynchronizedMap、ConcurrentHashMap
Stack、enumeration也是线程安全的
ResultSet数组的索引从1开始
Vector通过数组实现,支持线程同步,内部加锁的,但是效率低,线程安全,扩展空间时,扩展一倍
ArrayList通过数组实现,线程不安全,可以存储重复数据,不同步,扩展空间时,扩展原来的50%,有利于节约空间
ThreadLocalMap使用开放地址法来处理散列冲突
HashMap使用分离链表法来处理冲突
SortedMap是接口
HashSet线程不安全,不允许存储相同的对象,内部使用Map保存数据,就是将HashSet的数据作为Map的key值保存,这也就是HashSet中元素不能重复的原因,而Map中保存Key值前会去判断当前Map中是否含有该key对象,内部是先通过key的hashcode,确定形态hashcode之后,再通过equals方法判断是否相同。
TreeMap基于红黑树实现,key不能为null
HashMap,TreeMap 线程不安全,未进行同步
HashTable,ConcurrentHashMap线程安全,其中HashTable对整体加锁,ConcurrentHashMap对需要的加锁。
LinkedBlockingQueue是可选有界队列,不允许 null值,是基于节点链接的可选是否有界的阻塞队列,线程安全,先进先出,FIFO。
TreeSet自然排序,LinkedHashSet按添加顺序排序
PriorityQueue,无界队列,线程安全,不允许null值,入队和出队时间复杂度是O(logn)。
ConcurrentLinkedQueue,线程安全,遵循FIFO原则。
ConcurrentHashMap是HashMap(线程安全)的实现类,保存的值可以重复,键不可以重复
ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,
ConcurrentHashMap使用ReentrantLock来保证线程安全。
StringBuilder:线程不安全,运行速度最快
StringBuffer:线程安全,允许比String快
String不可变,线程安全
Sting内部用char[]数组实现,char存储的是unicode码。