数据类型
基本类型:byte,int,float,double,long,boolean,char,short;
应用类型:数组,类,接口;

==与equals的区别
对基本数据类型来说,==判断两边的值相等。
对引用类型来说,==判断两边的引用是否相等,也就是两边的是否指向同一块内存区域。
equals针对于引用类型,比较的也是值。

equals与hashCode的关系
equals相等,hashCode一定相等;
hashCode相等,equals不一定相等;
hashCode主要用于确定对象的存储位置的,用于查找的便捷性;相当于一个桶;放置对象,桶中的对象是否一样还需要equals进行判断;

为什么重写 equals 方法必须重写 hashCode 方法
两个对象如果使用equals方法不相等,通过重写equals方法使两对象相等,这时的hashCode就可能不相等,这就是相违背的。所以需要通过某种算法,是equals相等的同时,hashCode值也要相等。

对static的理解
修饰变量:即静态变量,也称为类变量,类变量属于类所有,对不同的类来说,static变量只有一份,static修饰的变量位于方法区中,static变量只能通过类名.变量名进行访问,不能创建对象在再进行使用。
修饰方法:即静态方法,静态方法可以直接通过类名.方法进行使用,在静态方法内部不能再使用静态方法。
修饰代码块:一种直接定义类,static{},称为静态代码块;一种在类中定义,即静态内部类。

对final的理解
java中的关键字,代表不可变;
修饰类:final修饰的类不能被继承;
修饰方法:final修饰的方法不能被重写;
修饰变量:final修饰的变量不能够被改写;对于基本数据类型来说,其值不会改变;final修饰的对象(引用类型),其引用不会变,但属性可能变;在并发编程中,就可以为确定不会变的值用final进行修饰,有利于减少开销;

抽象类与接口
相同点:都允许定义方法而不进行实现。都能够被继承;
不同点:在接口中不允许方法的实现,而抽象类可以进行方法的实现;使用的关键词不同;接口中变量是公共的静态变量;抽象类中的变量是普通变量;一个类可以实现多个接口,而一个类只能继承一个抽象类。接口中的方法只能是公共的,抽象类可以是其他的,如protected;抽象类中可以包含静态方法,接口中不能包含静态方法等;

重写与重载
都是对同一方法的不同表现形式;
子父级关系不同:重写是针对子父级之间的表现形式,即一般是子类重写父类中的方法;而重载是在同一个类进行的不同表现形式;
方法不同:重写后的方法其方法的声明和传参类型、顺序,返回参数必须要与父类完全一致;
重载只需要求方法名一样;方法参数顺序,参数个数,参数类型,返回类型任意一项保持一致jiqi

HashMap 和 Hashtable 的区别
相同点:都是基本哈希表实现的,每个元素都是以key-value键值对存在,都实现了Map,Cloneable,序列化接口;

不同点:
父类不同:HashMap:继承了AbstractMap类 Hashtable:继承了Dictionary类
图片说明
图片说明
限制条件不同:HashMap允许空的key,value值;Hashtable不允许空的key和value;
线程安全性:HashMap是线程不安全的,如果对HashMap进行操作,必须同步操作;如果对HashMap中的数据进行多线程操作,可以使用ConcurrentHashMap,而Hashtable是本身就是线程安全的;
性能方面:都是基本单链表实现,但是Hashtable的get和put都加了synchronized锁,性能就没有HashMap高;

HashMap和HashSet的区别
HashSet继承于AbstractSet类,HashSet不允许出现重复的值,由于HashSet的底层就是HashMap,所以也不是线程安全的容器;

HashMap 的底层结构
JDK1.7:由位桶(本质就是数组)和链表构成;若每个桶中链表较长,通过key查询的效率就会大大降低
JDK1.8中,加入了红黑树,若桶中的元素大于8时会自动转变为红黑树,当红黑树的节点小于6时就会变为链表。优化查询效率;

ConcurrentHashMap 底层实现
ConcurrentHashMap是线程安全的Map,高并发首选的数据结构;底层是通过分段锁进行实现的;

关于Arrays.asList
将数组转化成list的一种静态方法;转化出来的List集合不能进行元素的增加(add)和删除操作(remove)
源码如下:
图片说明
图片说明
虽然set方法也会抛异常,但是子类重写set方法,所以可以对元素进行修改;
图片说明
此方法不能进行基础类型的转化的。

Collection 和 Collections 的相似和不同
图片说明
Collection是集合类的顶级接口。Collection接口是Set接口和List接口的父接口
Collections是集合框架的工具,提供了一些工具类的基本使用。比如sort方法对集合进行排序,实现线程安全的容器;reverse,fill元素替换等方法;Conllections不能够实例化,只能够Conllections.方法进行使用;

ArrayList、LinkedList 和 Vector 的区别
都实现了List接口;
ArrayList的底层结构动态数组,所以具有数据的特性,遍历效率很高,但是增删效率很低,ArrayList是一个非线程安全的容器,在并发场景中会出现线程安全的问题,如果想使用线程安全的容器,此时就可以使用Collections.synchronizedList;
LinkedList的底层结构是一个双向链表,它的增删效率就很高,因为增加删除元素过后,只需要将元素的指针指向新的元素即可,但是遍历效率就很低,链表没有下标的概念,只能是对总数遍历,然后取循环下标的值,也是一个非线程安全的问题;
Vector是一个线程安全的容器,方法上都加了synchronized锁,所以增删和查询效率都很慢;

super关键字的三种用法
super只在子类中出现
【1】 super.xxx;
xxx可以是类的属性。
例如super.name;即从子类中获取父类name属性的值
【2】 super.xxx();
xxx()可以是类中的方法名。
super.xxx();的意义是直接访问父类中的xxx()方法并调用
【3】 super();
此方法意义是直接调用父类的构造函数。
super(无参/有参)即调用父类中的某个构造方法,括号里的内容根据你所调用的某个构造函数的变化而改变,默认都会调用父类中的无惨构造

子类会继承父类的构造方法吗?
子类不会继承父类的构造方法,因为构造方法不能够被重写,但子类默认存在一个隐式的super()方法,调用父类的无参方法,如果子类中存在super(xxx,xxx...)方法,就会调用父类的带参构造,不再调用隐式的super()方法。

TreeMap和HashMap的区别
1.HashMap是通过hashCode()来对元素进行查找的,HashMap中的元素是没有顺序的。
TreeMap中所有的元素都是有顺序的,如果需要得到一个有序的结果,就应该使用TreeMap;
2.HashMap继承AbstractMap类;TreeMap继承SortedMap类;
3.HashMap:适用于Map插入,删除,定位元素;TreeMap:适用于按自然顺序或自定义顺序遍历键;
https://www.cnblogs.com/bailing80/p/11443409.html