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

Java:高频面试知识分享2

HashSet 和 TreeSet 的区别?

  • 底层实现:HashSet 基于 HashMap 实现,使用哈希表存储元素;TreeSet 基于 TreeMap,底层为红黑树。

  • 元素顺序:HashSet 无序;TreeSet 会根据元素的自然顺序或传入的 Comparator 进行排序。

  • 性能:HashSet 的增删查为 O(1),TreeSet 为 O(log n)。

  • null 值支持:HashSet 允许添加一个 null 元素;TreeSet 不允许 null 元素。

  • 使用场景:仅需去重且不关心顺序时使用 HashSet;需要排序或范围查询时使用 TreeSet。

 Collection 和 Collections 的区别

  • Collection 是 Java 中集合类的根接口之一,包括 List、Set、Queue 等。

  • Collections 是一个工具类,提供对集合进行操作的静态方法,例如排序、同步包装等。

HashMap 和 Hashtable 的区别?

  • 线程安全:HashMap 非线程安全;Hashtable 是线程安全的,内部方法有 synchronized 修饰。

  • null 键值支持:HashMap 允许一个 null 键和多个 null 值;Hashtable 不允许 null 键或 null 值。

  • 性能:HashMap 性能更高;Hashtable 由于加锁性能较差。

  • 是否过时:Hashtable 已基本被淘汰,推荐使用 ConcurrentHashMap。

Java 集合框架的常见接口有哪些?

  • Collection 接口:包括 List、Set、Queue 等。

  • Map 接口:用于存储键值对,如 HashMap、TreeMap 等。

  • List:有序可重复,如 ArrayList、LinkedList。

  • Set:无序不重复,如 HashSet、TreeSet。

  • Queue:队列结构,如 PriorityQueue、LinkedList。

Collection 接口的最佳实践?

  • 编程时面向接口,如 List list = new ArrayList<>();

  • 根据实际使用场景选择实现类。

  • 多线程场景使用并发集合或通过 Collections.synchronizedXXX 包装集合。

  • 避免返回 null,可返回空集合:Collections.emptyList()。

  • 使用泛型增强类型安全。

ArrayList 和 HashMap 的默认容量?

  • ArrayList 的默认初始容量为 10。

  • HashMap 的默认初始容量为 16,负载因子为 0.75,超过容量 * 负载因子即触发扩容。

Java 中抽象和封装的区别?

  • 抽象:关注对象具有什么功能,对外暴露必要的接口,隐藏实现细节。关键词:abstract、interface。

  • 封装:将数据和操作封装在类中,通过访问控制符隐藏内部实现。关键词:private、getter/setter。

Java 是否支持多继承?

  • Java 不支持类的多继承,以避免菱形继承问题。

  • Java 支持接口的多继承,一个类可以实现多个接口。

  • Java 8 之后接口支持 default 方法,如有冲突需在实现类中显式重写。

static 方法中是否可以访问非 static 变量?

  • 不可以。static 方法属于类,不依赖具体实例;非 static 变量属于对象,必须通过对象访问。

  • 示例:

class Demo {int a = 10;static void test() {System.out.println(a); // 编译错误}
}
  • 正确做法:

Demo d = new Demo();
System.out.println(d.a); // 正确

http://www.dtcms.com/a/309503.html

相关文章:

  • vue+cesium+geoserver跨域问题
  • 计算机组成原理2-2:进位计数制及其数据之间的相互转换
  • ubuntu 镜像克隆
  • React + ts + react-webcam + CamSplitter 实现虚拟摄像头解决win摄像头独占的问题
  • Java 22 新特性解析与代码示例
  • leecode42 接雨水
  • Mysql join语句
  • ansible简单playbook剧本例子2
  • CMake set_source_files_properties使用解析
  • 如何通过黑白棋盘进行定位配准融合?(前后安装的两个相机)
  • 大模型微调实战 -基于SWIFT框架
  • 南太平洋金融基建革命:斐济-巴新交易所联盟的技术破局之路 ——从关税动荡到离岸红利,跨境科技如何重塑太平洋资本生态
  • 使用Gemini API开发领域智能聊天机器人的思路
  • js判断是个变量和属性是否是有效值
  • PixelCNN介绍:VQ-VAE的前一步探索
  • 2025年Python Web框架之争:Django、Flask还是FastAPI,谁将主宰未来?
  • JsHook入门
  • 什么是爬虫协议?
  • 如何优雅删除Docker镜像和容器(保姆级别)
  • 热能小车cad【12张】三维图+设计说明书
  • 机械学习中的一些优化算法(以逻辑回归实现案例来讲解)
  • 【Flutter3.8x】flutter从入门到实战基础教程(五):Material Icons图标的使用
  • 燃气营商环境测评:以用户反馈推动服务升级​(第三方市场调查)
  • 逻辑回归----银行贷款模型优化
  • 嵌入式教学的云端革命:高精度仿真如何重塑倒车雷达实验与工程教育——深圳航天科技创新研究院赋能新一代虚实融合实训平台
  • IIS 让asp.net core 项目一直运行
  • Linux文件系统理解2
  • OpenGL Camera
  • 【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南
  • vue项目预览pdf隐藏工具栏和侧边栏