java面试
珍惜时间简单生活
这个作者很懒,什么都没留下…
展开
-
HashMap的底层实现
(1)HashMap的构成 HashMap是由数组+链表实现的。它的主干是一个Entry数组,Entry是HashMap的基本组成单元,每一个Entry包含一个 key-value的键值对。链表是为了解决哈希冲突而存在的。(2)如果存储? 如果将键值对存储到Map中,首先会调用hashCode()方法获取hashCode,并对数组长度取余找到数组上的存储位置,然后判断该位置是否由元素,...原创 2018-08-09 16:35:33 · 243 阅读 · 2 评论 -
Java NIO:BIO与NIO的区别
NIO的核心:Channel(通道),Buffer(缓存), Selector(选择器) (1)BIO是面向流(Stream)的,NIO是面向缓存区(Buffer)的。 IO面向流一位着每次从流中读一个或多个字节,直至读取所有字节,他们没有缓存在任何地方,也不前后移动流中的数据;NIO读取到一个可处理的缓冲区,可以再还从去中前后移动数据。 (2)BIO的流是阻塞的,NIO是非阻塞的。 ...原创 2018-08-09 16:37:08 · 1013 阅读 · 2 评论 -
Java NIO:BIO,NIO和AIO的区别
(1)BIO,同步阻塞式,一个连接一个线程。 使用BIO模式建立网络连接,需要在服务端启动一个ServerSocket,然后客户端启动Socket进行通信。服务器对每个请求建立若干线程等待请求,客户端发送请求后,先循询问服务端是否有线程,如果没有则等地啊或者遭到拒绝请求,如果有,客户端线程会等待请求结束后踩继续执行。 (2)NIO,同步非阻塞IO, 一个请求一个线程。 NIO基于Rea...原创 2018-08-09 16:38:24 · 2089 阅读 · 0 评论 -
ArrayList和LinkedList的区别
ArrayList和LinkedList都实现了List接口 (1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (2)ArrayList适合查询,时间复杂度为O(1);不适合删除数据多的情况,因为需要移动数组中的数据。 (3)LinkedList适合增删,时间复杂度为O(1);不适合查询多的情况,最坏的时间复杂度会O(n)。 (4)L...原创 2018-08-09 16:39:30 · 231 阅读 · 0 评论 -
ArrayList的扩容方式和扩容时机
ArrayList的底层是一个动态数组,ArrayList首先会对传进来的初始化参数initalCapacity进行判断,如果参数等于0,则将数组初始化为一个空数组,如果不等于0,将数组初始化为一个容量为10的数组。初始容量也可以自定义指定。随着不断添加元素,数组大小增加,当数组的大小大于初始容量的时候(比如初始为10,当添加第11个元素的时候),就会进行扩容,新的容量为旧的容量的1.5倍。 ...原创 2018-08-09 16:41:07 · 3963 阅读 · 0 评论 -
"==",equals 和 hashCode有什么区别?
"=="用来比较两个变量是否相等。如果比较的是两个基础类型变量,则比较的是两个变量的值是否相等;如果比较的是两个是两个对象,则比较的是两个对象的地址是否相同;equals是Object类的方法。在没有重写equals方法的情况下,equals与"=="的效果一样可以重写equals方法,使得比较的是两个对象的内容是否相同。比如典型的String类就重写了equals方法,如果使用equa...原创 2019-03-27 19:15:06 · 374 阅读 · 0 评论