之前在我的博客平台分享ThreadLocal相关知识的时候,有粉丝在下面给我留言,整理的不错,但是,因为刚开始,很多东西再回想的时候发现有些遗忘,比方说map相关得内容
其实这是一个很好的学习方法,不仅仅是为了学习某一个知识,而是顺带其他知识点的复习回顾,那今天再分享知识的时候,我前面占用一点空间,整理Java集合的相关内容
java集合
因为这不是今天的重点,所以就大体一过,如果有朋友需要,可以评论区留言,我后面会单独总结一下。如果这部分内容已经很熟悉了,可以跳过
-
集合包含Collection接口和Map接口
-
顶层接口是collection,底下有2个常用的接口分别为list接口(有序可重复)和set接口(无序不可重复)
-
list接口常用的实现类有Vector(数组,线程安全),ArrayList(数组,线程不安全),LinkList(链表)
-
set接口常用的实现类有HashSet(底层HashMap),TreeSet(底层Treemap,二叉树里面的红黑树,可以实现有序,类实现comparable接口,重写compareTo方法)
-
顶层接口Map接口(键值对)常用的实现类有Hashtable(线程安全,不允许存放null键,null值),HashMap(哈希表和哈希函数(数组+链表)线程不安全,允许存放null键和null值),TreeMap(红黑树,对键进行排序),properties(Hashtable子类,读配置文件,都是String类型)
总结:
-
记一种思想:旧的都是线程安全的,也叫线程同步,但是效率低,最终被新的替代,但是新的效率是提高了但是线程不同步。(这个原理跟StringBuffer,StringBuilder一样) 集合中例如:Vector和ArrayList,Hashtable和HashMap。有相关的工具类(Collections工具类)可以相互转换!
-
String类重写了hashcode和equals方法,所以可以直接用来当做map的键。
-
关于Set保证键唯一:先比较hashcode(有存储地址等等信息),如果不相同,直接加入set即可;如果相同,再比较equals方法,equals方法相同就不加入,equals方法不相同就加入。(不同的对象hash值可能相同(所以需要再用equals判断),但是hash值不同的对象,一定不相同(所以直接加入集合即可)),联想到hash冲突。
-
Hashset的底层实现是用Hashmap实现的,TreeSet的底层实现使用TreeMap实现的,所以说set是基于map实现的。
好了,开始今天的正题,ThreadLocal来了
ThreadLocal
-
ThreadLocal意思是线程局部变量,用来存变量的,虽然ThreadLocal结构是个map,但是一个ThreadLocal对象只存一个变量,该变量可以是一个对象,也可以是基本数据类型,有个特点是该变量在每一个用到它的线