java面试题库冲刺1-java基础知识(JDK,JRE联系,HashMap和HashTable,==和equals,ArrayList和LinkedList,深拷贝和浅拷贝,重载和重写的区别)

1.【基础】JDK、JRE、JVM区别和联系

JDK:JAVA Deveipment Kit java开发工具
JRE:JAVA Runtime Enviroment java运行环境
JVM:JAVA Virtual Machine java虚拟机

JDK里开发环境包含了JRE,java运行得环境,JRE里面又包含了虚拟机。

2.【基础】HashMap和HashTable的区别及底层实现

HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。

不同点:
1.HashMap是不安全的;HashTable线程安全的(使用了synchronized关键字来保证线程安全)
2.HashMap中key和value可以为空;HashTable中value不可以为空。

HashMap底层实现
数组加链表实现得
首先会对key进行哈希,二次哈希然后对值取模,对应数组下标
1.如果没有哈希冲突(数组下标没有值),直接创建node存入数组
2.如果出现哈希冲突,先进行equas比较,如果相同,则取代该元组。如果不同,则插入链表。
3.插入链表时会先判断高度,如果链表高度大于8而且数组长度达到64,就会转化为红黑树,长度低于6红黑树会退化成链表。(这样get时不会因为链表长度太长,遍历效率变低)
4.如果key为null,则存在下标为0得位置

HashTable的主要方法的源码实现逻辑,与HashMap中非常相似,也是数组加链表实现的。有一点重大区别就是所有的操作都是通过synchronized锁保护的。只有获得了对应的锁,才能进行后续的读写等操作。

3.【基础】==和equals

==: 对比的是栈中的值,基本数据类型对比的是变量值,引用数据类型对比的是内存地下的地址。
equals:object中默认的也是用‘=’= 比较,基本上相同,但是基本上都会重写。

在String中就重写了equals方法,比较两个字符串,不在比较内存地址,而是把每次字符拿出来单独比较,如果相同返回true。

4.【基础】ArrayList和LinkedList区别

ArrayList底层是数组,查询快、增删慢;
LinkedList底层是链表,查询慢、增删快。

ArrayList扩容,因为底层是数组,超过数组初始化的大小,就会新建一个数组,长度是老数组的1.5倍,然后将老数组的数据拷贝到新的数组里面去,在进行插入。用尾插法插入,不会比链表慢。

5.【基础】泛型中extends和super的区别

<? extends T>表示包括T在内的任何T的子类
<? super T>表示包括T在内的任何父类

6.【基础】深拷贝和浅拷贝

基本数据类型的特点:直接存储在栈(stack)中的数据
引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里

如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别
如果拷贝的对象里的元素包含引用,那浅拷贝和深拷贝是不同的
不同点:
浅拷贝:虽然将原有对象复制一份,但是依然保存的是引用,所以对新对象里的引用里的值进行修改,依然会改变原对象里的列表的值,新对象和原对象完全分离开并没有完全分离开。
深拷贝:它会将原对象里的引用也新创建一个,即新建一个列表,然后放的是新列表的引用,这样就可以将新对象和原对象完全分离开。

7.【基础】重载和重写的区别

重载:发生在同一个类中,方法名必须相同,但是参数不同,返回值不同
重载:发送在父子类中,子类重写父类的方法,方法名和参数名必须相同,返回值范围小于父类,抛出异常小于父类访问修饰符大于父类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值