首页 > 编程知识 正文

java笔试题,java常见面试题及答案

时间:2023-05-06 09:43:42 阅读:24821 作者:3714

1.ArrayList vs链接列表

1 ) ArrayList以可扩展的数组实现,LinkedList以链表实现

2 )数组与链表的最大区别是数组可以随机访问

链表从一开始就只能一次遍历一个

3 )两者的追加、删除、重新评估操作的区别

在研究这两个功能时,数组可以随机访问,因此ArrayList很有效率

在添加和删除这两个功能的基础上,如果不考虑找到这个要素的时间排列,由于物理上的连续性

添加或删除元素时,尾部可以,但其他地方的后续元素会移动

因此,非常低效,链表可以很容易地在与下一个元素的连接中直接插入新元素,或溢出旧元素

2.ArrayList vs矢量

1 ) Vector是线程安全的,ArrayList不是线程安全的

2 ) Vector默认放大两倍ArrayList默认放大1.5倍

3 ) Vector也和ArrayList一样,从AbstractList的基础继承,通过数组实现

但是,现在被抛弃了。 因为线程安全的好处需要成本

线程安全的代价是效率低下。 有些系统容易陷入瓶颈,所以现在大家都不在了

将此任务转移到程序员,而不是将同步添加到数据结构级别

4.HashSet的实现原理

HashSet是基于HashMap实现的基础,采用HashMap的key存储元素的主要特点是所有不必要的基本操作都是o (

1 )时间复杂性

5.HashMap的实现原理

JDK1.8之前数组链表后的数组红黑树

6.HashMap vs HashTable

Hashtable是线程安全的HashMap不是线程安全的

HashMap允许key具有空值。 Hashtable不允许。 这种好处是可以设置默认值

其实,HashMap和Hashtable的关系考虑的是ArrayList和Vector,还有StringBuilder和StringBuffer

Hashtable是早期JDK提供的接口。 HashMap是因为这些新版本在JDK5之后进行了改进

防止数据结构考虑线程安全问题。 这是因为在实际工作中发现,不需要在数据结构的级别进行锁定

在具有锁定和对等项的系统上,具有开销的内部锁定可能会成为程序瓶颈

HashMap ArrayList StringBuilder不再考虑线程安全问题,从而大大提高了性能

7 .为什么要改变equals就要改变hashcode (?

首先,假设这两个Object的hashcode都不通过,即在hash function的情况下有效

在该条件下两个object相等,但是如果不重写hashcode,则计算出的哈希值不相同,则取不同的值

buckets后迷失在偏僻的地方,再也认不出来后与equals ()条件相矛盾

1 ) hashcode ) )决定了key放在这个水桶里看到的号码是数组中的索引

2 ) equals ) )用于比较两个Object是否相同

8 .如何解决散列冲突

1 )在碰撞的水桶后面再加一条链条保存

2 )按顺序找,如果这个桶里已经被占用了,继续在某条街上找

下一个未占用的水桶,直到找到第一个空的------线性勘探

9.Collection vs Collectios

Collection是集合接口

Collections是一个包含工具类集合的操作类,它提供了一些静态方法

1.ArrayList VS LinkedList

1 ) ArrayList以可扩展的数组实现,LinkedList以链表实现

2 )数组与链表的最大区别是数组可以随机访问

链表从一开始就只能一次遍历一个

3 )两者的追加、删除、重新评估操作的区别

在研究这两个功能时,数组可以随机访问,因此ArrayList很有效率

在添加和删除这两个功能的基础上,如果不考虑找到这个要素的时间排列,由于物理上的连续性

添加或删除元素时,末尾没有问题,但其他地方的后续元素会移动

所以效率极低  而链表可以轻松的端来和下一个元素的连接  直接插入新元素或者溢出旧元素

 

2.ArrayList VS Vector

1) Vector是线程安全的 而ArrayList是线程不安全的

2)Vector默认扩容扩大至2倍  ArrayList默认扩大至1.5倍

3)Vector和ArrayList一样 也是继承自AbstractList底层也是用数组来实现的

但是现在已经被弃用了  因为它是线程安全的  任何好处都是有代价的

线程安全的代价就是效率低 在某些系统很容易成为瓶颈  所以现在大家不再在

数据结构的层面加synchronized 而是把这个任务转移给我们程序员

 

 

4.HashSet实现原理

HashSet是基于HashMap来实现的 底层采用Hashmap的key存储元素 主要特点是无需的  基本操作都是O(1)的时间复杂度 

 

5.HashMap的实现原理

JDK1.8之前  数组+链表   之后  数组+红黑树

 

 

6.HashMap  vs  HashTable

Hashtable是线程安全的 HashMap并非线程安全

HashMap允许key中有null值  Hashtable是不允许的  这样的好处就是可以个诶一个默认值

其实HashMap和Hashtable的关系  就想ArrayList与Vector 以及StringBuilder与StringBuffer

Hashtable是早期JDK提供的接口  HashMap是新版的 这些新版的改进 是因为JDK5之后 

允许数据结构不考虑线程安全的问题 因为实际工作中我们发现没有必要在数据结构的层面上上锁

加锁和方所在系统中是有开销的 内部锁有时候会成为程序的瓶颈

所以HashMap  ArrayList StringBuilder不再考虑线程安全的问题性能提升了很多

 

 

7.为什么改equals  一定要改hashcode()?

首先基于一个假设  任何两个Object 的hashcode都是不通过的 也就是hash function时有效的

那么在这个条件下  有两个object是相等的  如果不重写hashcode 算出来的哈希值 都不一样  就会取到不同的

buckets 了  就迷失在茫茫人海中了 再也无法相认  就和equals()条件矛盾了

 

1)hashcode()决定了key放在这个桶来看的编号 就是在数组里的index

2)equals()是用来比较两个Object是否相同的

 

8.如何解决哈希冲突

1)在发生碰撞的那个桶后面再加一条链来存储

2)顺序查找 如果这个桶里已经被占了 那就按照某种凡是继续找

下一个没有被占的桶  直到找到第一个空的    ------线性探查

 

 

9.Collection  vs  Collections
Collection  是集合接口 

Collections  是工具类  是集合的操作类  提供了一些静态方法供我们使用 

 

 

 

 

 

 

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。