==和equals方法区别
==
如果是基本数据类型,比较的是值,如果是引用类型,比较的是引用地址
equals
具体看各个类对equals方法重写之后的比较逻辑,比如String类,虽然是引用类型,但是String中重写了equals方法,方法内部比较的是字符串各个字符是否全部相等。
hashCode()和equals()之间的关系
hashCode介绍
hashCode()的作用是获取哈希码,也称为散列码;实际上是返回一个int证书,这个哈希吗的作用是确定改对象在哈希表中的索引位置。哈希表存储的是键值对,它的特点是能根据“键”快速的检索出所对应的“值”即可以快速找到所需对象。
可以利用hashCode来做一些提判断:
两个对象hashCode不同,那么两个对象肯定是不同的两个对象;
两个对象hashCode相同,可能是一个对象,也可能是两个对象;
两个对象相等,hashCode相同;
所以在Java一些集合类实现中比较两个对象是否相等时,先调用hashCode()得到哈希值进行比较,不同则认为两个对象不相同,相同在进一步调用equals()进行比较判断是否相等。
String、StringBuffer、StringBuilder
String是final修饰的不可变的,每次操作会产生新的String对象;
StringBuffer和StringBuilder都是在原对象上进行操作;
StringBuffer线程是安全的,StringBuilder线程是不安全的;
性能方面 StringBuffer > StringBuilder > String。
final
修饰类:表示类不能被继承;
修饰方法:表示方法不可被子类覆盖,但是可以重载;
修饰变量:表示变量一旦被赋值讲不能改变它的值。
List和Set
List
有序,可重复,允许有多个Null元素对象,可以使用Iterator取出所有元素,在逐一遍历
Set
无序,不可重复,最多允许一个Null元素对象,取元素时只能用Iterator接口取得所有元素再逐一遍历各个元素。
Iterator(迭代器)
Iterator是一种接口,为各种不同的数据结构提供统一的访问机制。
任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
一个数据结构只要具有 iterator 接口,就可以用for…of循环遍历它的成员。
并不是所有的对象都能使用for…of循环,只有实现了Iterator接口的对象,才能够for…of来进行遍历取值。
ArrayList和LinkedList
ArrayList
底层数据结构是基于数组实现的,场景更适用于随机查找,实现了List接口;
LinkedList
底层数据结构是基于链表实现的,场景更适用于增删改查、删除的时间复杂度不同,在实现了List接口的同时额外实现了Deque接口,所以还可以当做队列来使用。
深拷贝和浅拷贝
深拷贝和浅拷贝是指对象的拷贝,一个对象中存在两种数据的属性,一种是基本数据类型,一种是实例对象的引用
浅拷贝
只会拷贝基本数据类型的值,以及实例对象的引用地址,不会复制引用地址所指向的对象,浅拷贝出来的对象,内部的类属性指向的同一个对象;
深拷贝
即拷贝基本数据类型的值,也会针对实例对象的引用地址所指的对象进行复制,内部的类属性指向的不是同一个对象。