面试题:JDK、JRE、JVM三者的区别与联系+什么是字节码+采用字节码的好处是什么+List和Set的区别+ArrayList和LinkedList区别

目录

JDK、JRE、JVM三者的区别与联系

什么是字节码?采用字节码的好处是什么?

List和Set的区别

ArrayList和LinkedList区别


JDK、JRE、JVM三者的区别与联系

JDK:

Java Develpment Kit ——Java开发工具

JRE:

Java Runtime Environment——Java运行时环境

JVM:

Java Virtual Machine——Java虚拟机

  看图理解:

 运行一个Java程序:


什么是字节码?采用字节码的好处是什么?

Java中的编译器和解释器:

        Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器,这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口

        编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(及扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机

        每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定的机器上的机器码,然后在特点的机器上运行。这也就是解释了Java的编译与解释并存的特点。

Java源代码——>编译器——>jvm可执行的Java字节码(即虚拟指令)——>jvm——>jvm中解释器——>机器可执行的二进制机器码——>程序运行

采用字节码的好处?

        Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点 。 所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的的计算机上运行(跨平台)。       


List和Set的区别

List

有序,按对象进入的顺序保存对象;

可重复,允许多个NULL元素对象;

可以使用Iterator取出所有元素,再逐一遍历;还可以使用get(int index)获取指定下标的元素;

Set

无序

不可重复最多允许有一个NULL元素对象;

取元素时只能用Iterator接口取得所有元素,在逐一遍历各个元素


ArrayList和LinkedList区别

ArrayList

基于动态数组,连续内存存储;

适合下标访问(随机访问);不太适合增删;

扩容机制:因为数组长度固定,超出长度存数据时需要新建数组,然后将老数组的数据拷贝到新数组,如果不是尾插数据还会涉及到元素的移动,使用尾插法并指定初始容量可以极大提升性能,甚至超过LinkedList(需要创建大量的节点)

LinkedList

基于链表,可以存储在分散的内存中;

适合做数据插入及删除操作不适合查询(需要逐一遍历);

遍历LinkedList必须使用iterator不能使用for循环,因为每次for循环体内通过get(i)取得某一元素时都需要对List重新进行遍历,性能消耗大。另外不要试图使用indexOf等返回元素索引,并利用其进行遍历,使用indexOf对List进行了遍历,当结果为空时会遍历整个列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙洋静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值