BAT面试题——22个集合框架(完)

1.Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用 == 还是equals()? 它们有何区别?

Set 里的元素是不能重复的,元素重复与否是使用 equals() 方法进行判断的。

equals() 和 == 方法决定引用值是否指向同一对象 equals() 在类中被覆盖,为的是

当两个分离的对象的内容和类型相配的话,返回真值。

2.两个对象值相同 (x.equals(y) == true),但却可有不同的 hash code,这句话对不对?

对。如果对象要保存在 HashSet 或 HashMap 中,它们的 equals 相等,那么,它

们的 hashcode 值就必须相等。

如果不是要保存在 HashSet 或 HashMap,则与 hashcode 没有什么关系了,这时

候 hashcode 不等是可以的,例如 arrayList 存储的对象就不用实现 hashcode,当

然,我们没有理由不实现,通常都会去实现的。

3.heap 和 stack 有什么区别。

Java 的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法

时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,

当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。

堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使

用 new 创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部

变量使用 final 修饰后,放在堆中,而不是栈中。

4.Java 集合类框架的基本接口有哪些?

集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选

择以它 自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。

Java 集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java 集合

类里面 最基本的接口有:

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

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

List:有顺序的 collection,并且可以包含重复元素。

Map:可以把键 (key) 映射到值 (value) 的对象,键不能重复。

5.HashSet 和 TreeSet 有什么区别?

HashSet 是由一个 hash 表来实现的,因此,它的元素是无序的。add(),

remove(),contains()

TreeSet 是由一个树形的结构来实现的,它里面的元素是有序的。因此,add(),

remove(),contains() 方法的时间复杂度是 O(logn)。

6. HashSet 的底层实现是什么?

通过看源码知道 HashSet 的实现是依赖于 HashMap 的,HashSet 的值都是存储

在 HashMap 中的。在 HashSet 的构造法中会初始化一个 HashMap 对象,

HashSet 不允许值重复,因此,HashSet 的值是作为 HashMap 的 key 存储在

HashMap 中的,当存储的值已经存在时返回 false。

7. LinkedHashMap 的实现原理?

LinkedHashMap 也是基于 HashMap 实现的,不同的是它定义了一个 Entry

header,这个 header 不是放在 Table 里,它是额外独立出来的。

LinkedHashMap 通过继承 hashMap 中的 Entry, 并添加两个属性 Entry

before,after, 和 header 结合起来组成一个双向链表,来实现按插入顺序或访问顺序

排序。LinkedHashMap 定义了排序模式 accessOrder,该属性为 boolean 型变

量,对于访问顺序,为 true;对于插入顺序,则为 false。一般情况下,不必指定排

序模式,其迭代顺序即为默认为插入顺序。

到这里,也给大家推荐一个架构交流学习群:710373545,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,相信对于已经工作和遇到技术瓶颈的码友,在这个群里会有你需要的内容。

8. 为什么集合类没有实现 Cloneable 和 Serializable 接口?

克隆 (cloning) 或者是序列化 (serialization) 的语义和含义是跟具体的实现相关的。

因此,应该 由集合类的具体实现来决定如何被克隆或者是序列化。

9. 什么是迭代器 (Iterator)?

Iterator 接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返

回迭代 器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素, 但是不

可以直接调用集合的 remove(Object Obj) 删除,可以通过迭代器的 remove() 方法

删除。

10. Iterator 和 ListIterator 的区别是什么?

下面列出了他们的区别:

Iterator 可用来遍历 Set 和 List 集合,但是 ListIterator 只能用来遍历 List。

Iterator 对集合只能是前向遍历,ListIterator 既可以前向也可以后向。

ListIterator 实现了 Iterator 接口,并包含其他的功能,比如:增加元素,替换元

素,获取前一个和后一个元素的索引,等等。

11. 数组 (Array) 和列表 (ArrayList) 有什么区别?什么时候应该使用 Array 而不是

ArrayList?

Array 可以包含基本类型和对象类型,ArrayList 只能包含对象类型。

Array 大小是固定的,ArrayList 的大小是动态变化的。

ArrayList 处理固定大小的基本数据类型的时候,这种方式相对比较慢。

12. Java 集合类框架的最佳实践有哪些?

 假如元素的大小是固 定的,而且能事先知道,我们就应该用 Array 而不是

ArrayList。

 有些集合类允许指定初始容量。因此,如果我们能估计出存储的元素的数目,

我们可以设置 初始容量来避免重新计算 hash 值或者是扩容。

 为了类型安全,可读性和健壮性的原因总是要使用泛型。同时,使用泛型还可

以避免运行时的 ClassCastException。

 使用 JDK 提供的不变类 (immutable class) 作为 Map 的键可以避免为我们

自己的类实现 hashCode()和 equals()方法。

 编程的时候接口优于实现。

 底层的集合实际上是空的情况下,返回长度是 0 的集合或者是数组,不要返

回 null。

13. Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是

equals()?它们有何区别?

Set 里的元素是不能重复的,那么用 iterator() 方法来区分重复与否。equals() 是判

读两个 Set 是否相等

equals() 和 == 方法决定引用值是否指向同一对象 equals() 在类中被覆盖,为的是

当两个分离的对象的内容和类型相配的话,返回真值

14. Comparable 和 Comparator 接口是干什么的?列出它们的区别。

Java 提供了只包含一个 compareTo() 方法的 Comparable 接口。这个方法可以个

给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于

已经存在的对象。

Java 提供了包含 compare() 和 equals() 两个方法的 Comparator 接口。

compare() 方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小

于,等于,大于第二个参数。equals() 方法需要一个对象作为参数,它用来决定输入

参数是否和 comparator 相等。只有当输入参数也是一个 comparator 并且输入参

数和当前 comparator 的排序结果是相同的时 候,这个方法才返回 true。

15. Collection 和 Collections 的区别。

collection 是集合类的上级接口, 继承与它的接口主要是 set 和 list。

collections 类是针对集合类的一个帮助类. 它提供一系列的静态方法对各种集合的搜

索, 排序, 线程安全化等操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容