hashcode() 和 equals() 方法最好都同时重写
- equals相等,hashcode一定相等
- hashcode相等,equals不一定相等
- 如上约定,equals判断复杂,可以通过hashcode快速定位,而Java Object中的hashcode实际上是对象地址的int
- 在集合判断的时候往往是先判断hashcode,在对比equals
Set:
- HashSet使用
hashCode
和equals
对元素进行contains判断 - 如何判断新增的数据是否重复
- 会先判断hashcode()是否相等
- 如果相等
- 判断equals()是否相等
- 相等认为数据存在
- 不相等认为数据不存在
- 如果不相等,认为数据不存在
- 无序,存储是按照hashcode存储,因此存储元素的顺序不是按照存入顺序保存
- 不能为空
HashSet是无序不重复,非线程安全,
TreeSet是有序比较不重复(红黑树结构 -> 左小右大,叶子节点为黑,根节点为黑,新增红节点,删除红节点
)
- 比较方式使用Comparable比较方式,及Comparator比较方式同时存在,以Comparator为主
LinkedHashSet有序不重复,采用链表结构
List:
- ArrayList使用
equals
对元素进行contains
判断 - 如何判断新增的数据是否重复
equals()是否相等?相等则存在,否则不存在
- 存储按照存入的顺序保存
- 可以为空
BlockingQueue 阻塞队列:
特点:
- 线程安全
- 可定义缓存区大小
- 继承自
AQS
实现并发编程
有缓存区:
ArrayBlockingQueue
put和take共享一个lock,因此无法做到真正意义上的并行
LinkedBlockingQueue
put和take独立一个lock
PriorityBlockingQueue
put没有阻塞,get无数据时会阻塞,需要控制生产者速度
无缓冲区:(等待理解)
SynchronousQueue
生产者和消费者直接对接,没有对应的则阻塞
网友评论