当前位置: 首页 > news >正文

判断两个list集合里的对象某个属性值是否一样_BAT面试题——22个集合框架(完)...

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

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

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

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

相关文章:

  • 在Linux上使用Qt编译WebKit
  • python 进度条_Python 如何实时显示进度条?
  • Massive Customization
  • python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2
  • 使用qmake 单独生成Qt程序
  • 检测同心圆_负氧离子检测仪的工作原理与选择
  • oracle wrost practics
  • 物联网专科专业必修课程_河南专升本专科专业热度统计
  • FreeXploiT 成立三年感言!
  • springboot如何保证几个insert语句在同一个事务里_dele锁te amp; insert 死
  • 出国申请PS注意事项
  • python分析彩票_重庆青少年编程Python
  • Windows Embedded CE 6.0开发初体验(六)平台定制
  • python做游戏用什么库_Python库之游戏开发及虚拟现实
  • 纪晓岚
  • 【Leetcode】101. 对称二叉树
  • bootstrap创建登录注册页面
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • java第三方包学习之lombok
  • JS基础之数据类型、对象、原型、原型链、继承
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Otto开发初探——微服务依赖管理新利器
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Wamp集成环境 添加PHP的新版本
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 构造函数(constructor)与原型链(prototype)关系
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于 Babel 的 npm 包最小化设置
  • 前端
  • 前端技术周刊 2019-02-11 Serverless
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 什么软件可以剪辑音乐?
  • 使用SAX解析XML
  • 收藏好这篇,别再只说“数据劫持”了
  • 数据结构java版之冒泡排序及优化
  • 我的面试准备过程--容器(更新中)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 终端用户监控:真实用户监控还是模拟监控?
  • 选择阿里云数据库HBase版十大理由
  • ​iOS安全加固方法及实现
  • ​如何防止网络攻击?
  • #git 撤消对文件的更改
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #Z2294. 打印树的直径
  • (39)STM32——FLASH闪存
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (4)事件处理——(7)简单事件(Simple events)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net与java建立WebService再互相调用