加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

40道Java基础常见面试题及详细答案

发布时间:2021-01-02 02:06:49 所属栏目:运营 来源:网络整理
导读:最近看到网上传播着各类口试履历及口试题,每每都是一大堆技能标题贴上去,可是没有谜底。 为此我业余时刻清算了40道Java基本常见的口试题及具体谜底,望各路大牛发明差池的处所不惜见教,留言即可。 八种根基数据范例的巨细,以及他们的封装类 引用数据范例

1、通过hashCode可以很快的查到小内存块。 2、通过hashCode较量比equal要领快,当get时先较量hashCode,假如hashCode差异,直接返回false。

List的三个子类的特点

ArrayList:

  • 底层数据布局是数组,查询快,增删慢。
  • 线程不安详,服从高。

Vector:

  • 底层数据布局是数组,查询快,增删慢。
  • 线程安详,服从低。
  • Vector相对ArrayList查询慢(线程安详的)。
  • Vector相对LinkedList增删慢(数组布局)。

LinkedList

  • 底层数据布局是链表,查询慢,增删快。
  • 线程不安详,服从高。

Vector和ArrayList的区别

  • Vector是线程安详的,服从低。
  • ArrayList是线程不安详的,服从高。
  • 配合点:底层数据布局都是数组实现的,查询快,增删慢。

ArrayList和LinkedList的区别

  • ArrayList底层是数组功效,查询和修改快。
  • LinkedList底层是链表布局的,增和删较量快,查询和修改较量慢。

配合点:都是线程不安详的

List有三个子类行使

  • 查询多用ArrayList。
  • 增删多用LinkedList。
  • 假如都多ArrayList。

String:合用于少量的字符串操纵的环境。?StringBuilder:合用于单线程下在字符缓冲区举办大量操纵的环境。?StringBuffer:合用多线程下在字符缓冲区举办大量操纵的环境。?StringBuilder:是线程不安详的,而StringBuffer是线程安详的。

这三个类之间的区别首要是在两个方面,即运行速率和线程安详这两方面。 起首说运行速率,可能说是执行速率,在这方面运行速率快慢为:StringBuilder > StringBuffer > String。

String最慢的缘故起因

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String工具一旦建设之后该工具是不行变动的,但后两者的工具是变量,是可以变动的。

再来说线程安详

在线程安详上,StringBuilder是线程不安详的,而StringBuffer是线程安详的。

假如一个StringBuffer工具在字符串缓冲区被多个线程行使时,StringBuffer中许多要领可以带有synchronized要害字,以是可以担保线程是安详的,但StringBuilder的要领例没有该要害字,以是不能担保线程安详,有也许会呈现一些错误的操纵。以是假如要举办的操纵是多线程的,那么就要行使StringBuffer,可是在单线程的环境下,照旧提议行使速率较量快的StringBuilder。

Map

  • Map是键值对,键Key是独一不能一再的,一个键对应一个值,值可以一再。
  • TreeMap可以担保次序。
  • HashMap不担保次序,即为无序的。
  • Map中可以将Key和Value单独抽取出来,个中KeySet()要领可以将全部的keys抽取正一个Set。而Values()要领可以将map中全部的values抽取成一个荟萃。

Set

  • 不包括一再元素的荟萃,set中最多包括一个null元素。
  • 只能用Lterator实现单项遍历,Set中没有同步要领。

List

  • 有序的可一再荟萃。
  • 可以在恣意位置增进删除元素。
  • 用Iterator实现单向遍历,也可用ListIterator实现双向遍历。

Queue

  • Queue遵从先辈先出原则。
  • 行使时只管停止add()和remove()要领,而是行使offer()来添加元素,行使poll()来移除元素,它的利益是可以通过返回值来判定是否乐成。
  • LinkedList实现了Queue接口。
  • Queue凡是不应承插入null元素。

Stack

  • Stack遵从后进先出原则。
  • Stack担任自Vector。
  • 它通过五个操纵对类Vector举办扩展,应承将向量视为仓库,它提供了凡是的push和pop操纵,以及取仓库极点的peek()要领、测试仓库是否为空的empty要领等。

用法

  • 假如涉及仓库,行列等操纵,提议行使List。
  • 对付快速插入和删除元素的,提议行使LinkedList。
  • 假如必要快速随机遇见元素的,提议行使ArrayList。

更为精辟的总结

Collection 是工具荟萃, Collection 有两个子接口 List 和 Set

List?可以通过下标 (1,2..) 来取得值,值可以一再。?Set?只能通过游标来取值,而且值是不能一再的。

ArrayList , Vector , LinkedList 是 List 的实现类

  • ArrayList 是线程不安详的, Vector 是线程安详的,这两个类底层都是由数组实现的。
  • LinkedList 是线程不安详的,底层是由链表实现的。

Map 是键值对荟萃

  • HashTable 和 HashMap 是 Map 的实现类。
  • HashTable 是线程安详的,不能存储 null 值。
  • HashMap 不是线程安详的,可以存储 null 值。

Stack类:担任自Vector,实现一个后进先出的栈。提供了几个根基要领,push、pop、peak、empty、search等。

Queue接口:提供了几个根基要领,offer、poll、peek等。已知实现类有LinkedList、PriorityQueue等。

https://segmentfault.com/a/1190000008101567

Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现,它们都是荟萃中将数据无序存放的。

1、hashMap去掉了HashTable?的contains要领,可是加上了containsValue()和containsKey()要领

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读