2021年08月09日 课堂笔记

Set集合

hashCode()
equals()

Set如何判断里面的元素是否相等。

先比较hashCode,如果hashCode不相等,那么这两个元素就是不相等的。
如果hashCode相等的话,接着使用equals()方法来判断这两个元素是否相等。

HashSet

底层还是HeashMap

TreeSet

底层是TreeMap
compare方法
compareTo方法

TreeSet排序

要装入TreeSet的元素要实现Comparable接口
或者实现Comparator接口
一般优先使用Comparable接口。

队列

PriorityQueue

数组实现的
不能加入null,

链式队列(LinkedList)

如何扩容

image-20210809104340812

poll方法

image-20210809104517250

image-20210809104523574

image-20210809104531534

Hashtable

负载因子是什么意思。

如何扩容

image-20210809140512779

Hashtable是线程安全的,而且是用拉链法做的,头插法。

看老师的PPT.

Properties

Hashtable的子类。

HashMap

HashSet是通过HashMap构造

负载因子
loadFactor

拉链法

线程不安全

红黑树(平衡树,AVL数)

Hashtable纯粹是拉链法
HashMap是拉链法+红黑树。
当存储的元素的数量超过负载因子的时候,不是使用拉链法开辟地址,而是改成红黑树。

HashMap的key可以为null,但是value可以为null.
key要唯一,所以key只能设置为null一次,value可以随意。

线程安全的HashMap。

如何判别两个对象是否一致
先调用hashCode,如果hashCode不一致,再调用equals()判断是否一致。

Map里面没有迭代器。

HashMap和Hashtable都由一个东西叫负载因子

TreeMap

排序的
存储机制是红黑树

TreeMap里面key可以为null吗?
key不能为null,因为compare方法需要使用key1.compareto(key2)方法,null不能调用方法所以TreeMap的可以不能为null.

image-20210809143850249

image-20210809143901731

ConcurrentHashMap

Key和value是否能为空,不可以:源码就是这么写的:

image-20210809144756873

原子操作

同步方法

同步代码块,同步代码块锁的颗粒度比较小,效率更高

三次登录,可以先不做了,(自己还需要做)
明天讲Mybatis

Collections

工具类

问在集合里面线程安全

List里面有Vetor,
Map里面有
concurrentHashMap—-拉链方法+红黑树,

Collections工具类的SynchronizeedXXXX方法。

image-20210809145921694

问的时候,已经不要问什么就说什么,一定要展开说。