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()方法.
标签:面试题,Java,HashMap,Day05,链表,接口,序列化,字节 From: https://www.cnblogs.com/carney/p/17034085.html