Java面试题Day05

1.说一下HashMap的实现原理?

HashMap是基于哈希表的Map接口的非同步实现,此实现提供所有可选的映射操作,并允许使用null值和null键.

2.HashMap是如何解决Hash冲突?

核心就是使用了数组的储存方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比,需要注意Jdk 1.8中

对HashMap的实现做了优化,

当链表中的节点数据超过了八个之后,该链表会转为红黑树来提高查询效率,数据长度低于6之后会退化为链表

3.为什么HashMap的初始长度为16?

因为长度太小很容易导致map扩容影响性能,如果分配太大的话又会浪费资源,所以就使用16作为初始大小

减少hash碰撞,提高map查询效率,分配过小防止频繁扩容,分配过大浪费资源,

4.HashMap和ConcurrentHashMap的区别?

ConcurrentHashMap对整个桶数组进行了分割分段(Segment),然后在每一个分段上都用了lock锁进行保护,

相对于HashTable的synchronized锁的粒度更精细了一些,并发性能更好,

而HashMap没有锁机制,不是线程安全的

HashMap的键值对允许有null,但是ConcureentHashMap都不允许.

5.什么是TreeMap?

TreeMap是一个有序的Key-value集合,他是通过红黑树实现的,

TreeMap基于红黑树(Red-Black tree)实现,该映射根据其键的自然顺序进行排序,

或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法,

6.comparable和comparator的区别?

comparable接口实际上是出自java,lang包,他有一个compareTo(Object obj) 方法用来排序

comparator接口实际上是出自java.util包,它有一个compare(Object obj1,Object obj2) 方法用来排序

7.如何实现对集合数据排序

使用Stream的sorted方法

使用Collections中的sort方法

使用有序的集合,例如:TreeSet,TreeMap

8.Io流系介绍

四大家族(IuputStream,OutputStream,Reader,Writer)

IuputStream与OutputStream是所有字节型输入流的祖宗类.

Reader与Writer是所有字节型输入输出流的祖宗类

9.Java的序列化.

序列化是一种处理对象流的机制,序列化就是把对象转化为字节流,被传输的对象必须实现serializable接口

反序列化是序列化的逆过程,把字节流转化为对象,

10.谈谈Java IO里面的常见类,字节流,字符流,接口,实现类,方法阻塞.

输入流就是从外部文件输入到内存,输出流主要是从内存输出到文件,

字符流中有抽象类IuputStream和OutputStream,字节流的子类有:

FileInputStream

FileOutputStream

BufferedOutputStream等

字符流的子类有

BufferedReader

Writer

都实现了Closeable,Flushable,Appendable,这些接口,程序中输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件,

java中的阻塞式方式是指在程序调用改方法时,必须等待输入数据可用或者检测到输入结束或者抛出异常,否则程序会一直停留在该语句上,

不会执行下面的语句,比如read()和readLine()方法.

posted @ 2023-01-08 08:42  英俊潇洒的萨克君  阅读(22)  评论(0)    收藏  举报