热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java集合框架面试问题精编与解析

简介java集合类是java.util包中的重要内容。java集合框架包含了大量集合接口以及这些接口的实现类和操作他们的算法。java集合框架图主要提供的数据结构+List又称有序

简介

java集合类是java.util 包中的重要内容。java集合框架包含了大量集合接口以及这些接口的实现类和操作他们的算法。

java集合框架图

技术图片

主要提供的数据结构

  • List

    又称有序的Collection。它按照对象的进入顺序保存对象,可以对列表中的每个元素的出入和删除元素位置进行精确的控制。同时,它可以保存重复的对象。
    LinkedList、ArrayList、Vector都实现了List接口。

  • Set

    Set 是数学意义上的集合。集合中元素不可重复。因此存入set的每个元素都必须通过equals()方法来确定对象的唯一性。
    Set 接口有两实现类,HashSet和TreeSet其中TreeSet 实现了SrotedSet接口所以TreeSet是有序的。

  • Map

    Map 提供一个从键映射到值得数据结构。它用于保存键值对,其中值可以重复,但是键一定唯一,不能重复。Java类库中有多个实现该接口的类:HashMap、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap。

Collection和Collections有什么区别

  • Collection是一个集合的接口。它提供了对集合对象进行基本操作的通用接口方法。实现该类的主要方法有List和Set。
  • Collections是针对集合类的一个包装类,它提供一系列的静态方法以实现对各种集合的搜索、排序、线程安全化等操作。(其中大多数方法都是用来处理线性表)

List

ArrayList,LinkedList和Vector的区别

  • ArrayList和Vector都是由Object[]实现的,LinkedList是由双向链表实现的。
  • Vector是线程安全的,Vector中绝大多数的方法都是直接或者间接同步的。
  • ArrayList每次扩容1.5倍,Vector每次扩容2倍。

Map

HashMap添加的过程

  1. 调用Key的hashCode()方法生成一个hash值h1。

    • 如果这个h1在HashMap中不存在,那么直接将添加到HashMap中。
    • 如果这个h1已经存在了那么找出HashMap中所有Hash值为h1的key。
  2. 分别调用equals()方法判断当前添加的key是否与已经存在的key值相同

    如果相同,说明当前的Key已经存在。HashMap会使用新的value覆盖原有的value。
    如果没有相同,说明当前的Key不存在。HashMap会创建新的映射关系。

  3. Hash冲突的解决。(当新增的key的Hash值在HashMap中存在时,就会产生冲突。一般有开放地址法、再Hash法、链地址法等解决Hash冲突问题。
    HashMap使用的是链地址法来解决冲突的

HashMap的查找过程

  1. 调用hashCode()方法获取Key的Hash值h,确定键为Key的所有值存储的首地址。
  2. 如果Key的值有多个,程序会遍历所有结果,并通过调用key的equals()方法来判断key的内容是否相等。只有当equals()方法的返回值为true时,对应的value才是正确值。

HashMap和HashTable的区别

  • 继承的父类不同:HashTable继承自Dictionary类,而HashMap继承自Abstract Map类但是都两者实现了Map接口
  • 线程安全性不同:HashTable 的方法是线程安全的,其中的每个方法都加入了Synchronized同步。
  • 提供的方法不同:HashMap和HashTable相似度很高,但是也有区别,在HashMap中将contain方法去掉了,改成了containsValue和containsKey。(contains容易造成误解
  • key和value是否可以为空值(null):在HashMap中允许且只允许一个key值为null,允许多个value值为null。HashTable中Key和value都不允许为null。
  • 遍历方式实现不同:HashTable和HashMap都是用了迭代器Iterator 1
    HashTable中还使用了Enumeration方式。

  • Hash值不同:HashTable直接将对象的HashCode作为Hash值。HashMap则重新计算key的Hash值。
  • 数组的初始化不同:HashTable默认为11,扩容为(old*2+1),HashMap 默认为16,扩容为(old*2)

WeakHashMap 和 HashMap 的异同

  • WeakHashMap 和 HashMap类似。二者不同的地方在于WeakHashMap中的Key采用的是“弱引用”的方式,只要WeakHashMap中的Key不再被外部引用。它就可以被垃圾回收器回收。
  • 而HashMap采用的是“强引用”的方式。当HashMap中的Key没有被外部引用时,只有在这key从HashMap中被删除之后,才可以被垃圾回收器回收。

HashMap、LinkedHashMap和TreeMap的异同

  • HashMap里面存入的键值对在取出时没有固定的顺序,是随机的。
  • TreeMap实现了SortMap的接口,能够把保存的记录根据键排序。因此取出来的是排序好的键值对。
  • LinkedHashMap 是HashMap的一个子类,如果需要输入和输出顺序相同则使用LinkedHashMap可以实现。(LinkedHashMap还可以按照读取顺序排序)

    HashMap 上下文中,同步指的是什么?

    同步意味着,在同一时刻中只有一个线程可以修改Hash表,任何线程在执行HashTable的更新操作前都要获取对象锁,其他线程则等待线程锁的释放。

如何实现HashMap的同步?

HashMap以使用

Map m = Collections.synchronizedMap(new HashMap());

来达到同步的效果。


  1. Iterator是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问访问一个容器对象中的各个元素。而又不必暴露该对象内部细节的方法。?

Java集合框架 面试问题整理


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
author-avatar
mobiledu2502856963
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有