集合类

Collection

List

  • 里面元素有序
  • 可以重复
  • 可以通过索引查找

ArrayList Vector

底层是数组,查询修改快
Vector的方法都添加了Synchronized修饰符 所以线程安全

Linkedlist

底层是链表 增删快

Set

  • 里面元素无序
  • 没有重复元素
  • Java底层是用Map实现 put(key,present)

HashSet

底层是哈希表,保证元素唯一性 需要重写hashcode equal方法

TreeSet

底层是二叉树,保证元素排序 其中的元素需要有可比性 要么是实现了Comparable接口
要么自己写Comparator比较器

Queue

Map

Hashmap

JDK8是 数组加链表加红黑树
如果哈希表的大小大于16(默认值)*扩容因子(0.75)则会扩容到下一个2^n
这是因为底层的hash函数是用(hashcode>>>16^hashcode)&n-1
前面后移16位然后自身异或可以让信息包括在后16位并且减少重复 提高散列
由于n 是2^n 所以-1后都是1111 这样相当于mod 减少存储的空间又提高散列
当哈希冲突发生时候 可以用链地址法和开放地址法解决
链地址法当冲突低于8时候是链表 冲突大于8会转成红黑树 当低于6又转成链表

Treemap

java底层是红黑树
集合类_第1张图片

其他集合

Hashmap Hashtable ConcurrentHashMap

Hashtable 里面有一个Object对象mutex 里面所有方法都对 mutux加了锁
这样效率很低 所以我们相当将锁粒度化

ConcurrentHashmap将数组每个元素进行加锁
集合类_第2张图片这样就可以减少锁对性能的影响
当头结点不存在的时候不用加锁 即用CAS操作添加头结点就行。
检测到内部正在扩容就帮助他一起扩容

你可能感兴趣的:(JAVA)