java 抽出集合中指定的值进行变化操作_BAT面试题——22个集合框架(完)

863917aefbd747d0c047250fae3d2c53.png

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。一般情况下,不必指定排

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

d1f1fab513f8d6184352ba7d6389f581.png

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 类是针对集合类的一个帮助类. 它提供一系列的静态方法对各种集合的搜

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

最后

离金9银十还有不到两个月,在这里小编整理了一些互联网大厂的面试题,分享给大家

dbc3e9884d0ffeb82664d2d62bcba8f5.png

关注作者+转发 转发 转发 重要的事说三遍

后台回复(面试)关键词即可免费领取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值