Collection集合

2019-01-02  本文已影响0人  哓晓的故事

hashcode() 和 equals() 方法最好都同时重写

  1. equals相等,hashcode一定相等
  2. hashcode相等,equals不一定相等
  3. 如上约定,equals判断复杂,可以通过hashcode快速定位,而Java Object中的hashcode实际上是对象地址的int
  4. 在集合判断的时候往往是先判断hashcode,在对比equals

Set:

  1. HashSet使用hashCodeequals对元素进行contains判断
  2. 如何判断新增的数据是否重复
  - 会先判断hashcode()是否相等
    - 如果相等
      - 判断equals()是否相等
        - 相等认为数据存在
        - 不相等认为数据不存在
    - 如果不相等,认为数据不存在
  1. 无序,存储是按照hashcode存储,因此存储元素的顺序不是按照存入顺序保存
  2. 不能为空

HashSet是无序不重复,非线程安全,
TreeSet是有序比较不重复(红黑树结构 -> 左小右大,叶子节点为黑,根节点为黑,新增红节点,删除红节点)

LinkedHashSet有序不重复,采用链表结构

List:

  1. ArrayList使用equals对元素进行contains判断
  2. 如何判断新增的数据是否重复
equals()是否相等?相等则存在,否则不存在
  1. 存储按照存入的顺序保存
  2. 可以为空

BlockingQueue 阻塞队列:

特点:

  1. 线程安全
  2. 可定义缓存区大小
  3. 继承自AQS实现并发编程

有缓存区
ArrayBlockingQueue put和take共享一个lock,因此无法做到真正意义上的并行
LinkedBlockingQueueput和take独立一个lock
PriorityBlockingQueueput没有阻塞,get无数据时会阻塞,需要控制生产者速度
无缓冲区:(等待理解)
SynchronousQueue 生产者和消费者直接对接,没有对应的则阻塞

上一篇 下一篇

猜你喜欢

热点阅读