资讯专栏INFORMATION COLUMN

Java技术面试“小抄”——集合类(实时更新)

Travis / 2239人阅读

摘要:接口在类库中有很多具体的实现。接口的意义是为各种具体的集合提供了最大化的统一操作方式。集合类框架的基本接口代表一组对象,每一个对象都是他的子元素不包含重复元素的有序的,可以包含重复元素将映射到的对象,不能重复。

写在之前:

这篇文章是自己面试过程中,总结出来的关于Java集合类的总结。每次面试之前来出来看看,速度快,也能很迅速的回忆一些细节问题。发布这篇文章,不仅仅是希望大家“临阵磨枪”,更希望大家能够以此学习其内在原理。毕竟,源码才是最正确的。

问题汇总: 1.ArrayList

实现方式:数组;

超出容量的话,增加50%,使用System.arraycopy()复制到新的数组;

默认容量为10

get()和set()性能很高,但是add()/remove()性能差。

2.LinkedList

实现方式:双向循环链表;

没有容量限制;

get()和set()性能差,但是add()/remove()性能很快。

3.Vector

与ArrayList类似

线程同步

使用Iterator方式遍历

自动增长原来一倍的数组长度

4.HashMap

实现方式:Entry[]数组实现的哈希桶数组;

初始容量为16,填充因子为0.7,扩容为2倍

用Key的哈希值取模桶数组的大小可得到数组下标;

计算hash对key的hashcode进行了二次hash,以获得更好的散列值,然后对table数组长度取摸

Entry用一个next属性实现多个Entry以单向链表存放;

JDK8里,当一个桶里的Entry超过8后,就不以单向链表而以红黑树来存放以加快Key的查找速度。

5.HashMap和HashTable区别

HashTable的方法前面都有synchronized来同步,是线程安全的;HashMap未经同步,是非线程安全的。

HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。

HashTable有一个contains(Objectvalue)功能和containsValue(Objectvalue)功能一样。

HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。

HashTable中hash数组默认大小是11,增加的方式是old*2+1HashMap中hash数组的默认大小是16,而且一定是2的指数

哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。

6.Collection和Collections的区别

java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

java.util.Collections 是一个包装。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

7.HashMap为什么容量是2的幂次

详见hashMap为啥初始化容量为2的次幂

8.hashCode和equals方法的关系

equals相等,hashcode必相等;hashcode相等,equals可能不相等。

9.Java集合类框架的基本接口

Collection:代表一组对象,每一个对象都是他的子元素;

Set:不包含重复元素的Collection;

List:有序的Collection,可以包含重复元素;

Map:将key映射到value的对象,key不能重复。

10.Enumeration接口与Iterator接口的区别

Enumeration接口比Iterator速率的2倍

Iterator线程比Enumeration安全

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67770.html

相关文章

  • java源码

    摘要:集合源码解析回归基础,集合源码解析系列,持续更新和源码分析与是两个常用的操作字符串的类。这里我们从源码看下不同状态都是怎么处理的。 Java 集合深入理解:ArrayList 回归基础,Java 集合深入理解系列,持续更新~ JVM 源码分析之 System.currentTimeMillis 及 nanoTime 原理详解 JVM 源码分析之 System.currentTimeMi...

    Freeman 评论0 收藏0
  • 金三银四,2019大厂Android高级工程师面试题整理

    摘要:原文地址游客前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。 最近整理了一波面试题,包括安卓JAVA方面的,目前大厂还是以安卓源码,算法,以及数据结构为主,有一些中小型公司也会问到混合开发的知识,至于我为什么倾向于混合开发,我的一句话就是走上编程之路,将来你要学不仅仅是这些,丰富自己方能与世接轨,做好全栈的装备。 原文地址:游客kutd...

    tracymac7 评论0 收藏0
  • Java - 收藏集 - 掘金

    摘要:强大的表单验证前端掘金支持非常强大的内置表单验证,以及。面向对象和面向过程的区别的种设计模式全解析后端掘金一设计模式的分类总体来说设计模式分为三大类创建型模式,共五种工厂方法模式抽象工厂模式单例模式建造者模式原型模式。 强大的 Angular 表单验证 - 前端 - 掘金Angular 支持非常强大的内置表单验证,maxlength、minlength、required 以及 patt...

    XiNGRZ 评论0 收藏0
  • 我的阿里之路+Java面经考点

    摘要:我的是忙碌的一年,从年初备战实习春招,年三十都在死磕源码,三月份经历了阿里五次面试,四月顺利收到实习。因为我心理很清楚,我的目标是阿里。所以在收到阿里之后的那晚,我重新规划了接下来的学习计划,将我的短期目标更新成拿下阿里转正。 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金...

    姘搁『 评论0 收藏0

发表评论

0条评论

Travis

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<