Object equals 方法 默认比较对象的地址值(有空指针报错可能)
Objects.equals静态方法比较两个人对象会判断空,防止空指针
boolean b = Objects.equals(s1,s2);
/*
public static boolean equals(Object a,Object b) {
return (a == b) || (a != null && a.equals(b));
}
*/
StringBuilder原理示意图

Collections家族图谱

集合中迭代器原理图

数组内部结构示意图

链表内部结构图

哈希值:是一个十进制的整数,有系统随机给出(就是对象的地址值,是一个逻辑地址值,是模拟出来得到地址,不是数据实际存储的物理地址)
HashSet内存结构图

HashSet存储元素不重复的原理

linkedHashSet集合
底层是一个哈希表(数组+链表/红黑树)+链表,多了一条链表(记录元素的存储顺序),保证元素有序。
可变参数
当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数
可变参数原理
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数传递个数,可以是0个(不传递)。1.2.3...。。多个
public int add(int...arr){
// arr底层是一个数组
}
线程
多线程过程图

多线程内存图解

实现Runable接口创建的好处
1.避免了单继承的局限性
一个类智能继承一个类,类继承了Thread就不能继承其他的类,实现Runnable接口,还可以继承其他的类,实现其他的接口
2.增强了程序的扩展性,降低了程序的耦合性,实现Runnable接口的方式,把设置线程任务和开启新线程进行了分离,实现类中,重写了run方法,用来设置线程任务,创建Thread类对象,调用start方法,用来开启新线程。
//创建一个Runnable接口的实现类对象
Runnable run = new RunnableImpl();
//创建Thread类对象,构造方法传递Runnable接口的实现类对象
//调用Thread类中start方法,开启新的线程执行run方法
t.start();
同步技术的原理

网友评论