-
Collections.addAll()用于向集合批量添加元素,简化代码。它接受目标集合和可变参数或数组,支持List、Set等Collection类型,但不支持数组本身;使用时需确保集合非null,注意null值和重复元素处理规则,返回true表示至少添加一个元素。该方法性能优于循环add,常与Arrays.asList()配合使用,但二者功能不同:后者创建固定大小列表,前者向动态集合添加元素。
-
上界通配符使用?extendsType形式,用于限定泛型类型为某类及其子类,适用于只读场景。例如List<?extendsNumber>可接收List<Integer>或List<Double>,允许读取为Number类型,但禁止添加除null外的元素,确保类型安全,提升代码灵活性。
-
启用Windows长路径并优化JDK、项目路径及构建工具配置可解决路径过长问题:1.通过组策略或注册表启用Win32长路径支持;2.将JDK和项目安装于短路径如C:\java\jdk17和C:\work\myproject;3.使用dir/x查看短文件名并配置JAVA_HOME为短路径格式;4.修改Maven的settings.xml设置localRepository为C:/repo,Gradle在gradle.properties中设置gradle.user.home=C:\gradle。合理规划路径与
-
Collectors.toList()是Java中将Stream转换为List的常用方法,属于java.util.stream.Collectors类,通过collect()收集流元素到List,返回的通常是可变的ArrayList;示例包括字符串流转换、结合filter筛选长度大于5的字符串、map映射整数平方等操作;注意事项有:结果列表可变,建议Java10+使用toUnmodifiableList()获取不可变列表,避免重复消费流,可通过toCollection()指定LinkedList等具体类型
-
HashSet通过HashMap底层实现元素唯一性,以元素为key、PRESENT为value存储,依赖hashCode定位桶和equals判断重复;自定义类须重写hashCode与equals保证一致性,null值允许且仅存一个。
-
组合关系是Java中强拥有、同生命周期的“整体-部分”关联,部分由整体创建并随其销毁,UML用实心菱形表示;它不同于聚合(弱拥有)和继承(is-a),应优先选用以降低耦合、提升灵活性。
-
Java用POI导出Excel卡顿的核心原因是写法不当导致内存暴涨、GC频繁或IO阻塞,应使用SXSSFWorkbook流式写入、复用样式与字体、关闭自动刷新、优化SQL及分批处理。
-
使用JSON序列化与文件IO实现日记持久化,通过BufferedReader/Writer读写文本文件,每篇日记以JSON格式存储并逐行解析;程序启动时加载文件内容反序列化为对象列表,结合Gson库完成数据转换;为提升可读性,设计标题居中、日期右对齐、正文自动换行及分隔线的格式化输出方案,确保信息清晰美观。
-
方法区存储类的元数据而非对象实例,Java8后由元空间(Metaspace)实现,使用本地内存;存放类结构、常量池引用等,字符串字面量在堆中但其引用在方法区,staticfinal编译期常量值被内联;PermGen已被Metaspace替代,OOM类型变为Metaspace相关;String.intern()影响方法区引用登记;Class.forName()和defineClass()向方法区注册类元数据;类卸载需满足实例、类加载器及元数据三重回收条件。
-
本文介绍使用TreeMap配合String.CASE_INSENSITIVE_ORDER比较器,实现“忽略大小写分组、保留首次出现形式作为键”的单词频次统计,适用于需保持原始大小写标识的场景。
-
new关键字创建对象时先触发类加载五阶段,待<clinit>执行完毕才分配内存并调用<init>;对象内存布局含对象头、实例数据、对齐填充;finalize已废弃,推荐Cleaner;GCRoots包括栈变量、静态属性、常量、JNI引用及被锁对象。
-
Properties读取配置最简路径是直接加载.properties文件,需用InputStream避免乱码,优先类路径加载,含中文时指定UTF-8编码;getProperty返回null不报错,须校验加载是否成功。
-
编译错误是javac编译阶段因语法或类型问题导致无法生成.class文件;运行错误是程序执行中触发RuntimeException而崩溃;逻辑错误是代码无异常但结果不符合预期。
-
构造方法用于初始化对象状态,在new实例化时自动调用。1.初始化成员变量,可传参设置属性,支持重载以满足不同需求。2.控制创建过程,可包含验证逻辑或资源分配,防止无效对象生成。3.通过private构造方法实现封装,限制实例化,常用于单例模式。合理使用提升代码安全性和可维护性。
-
判断两个Map键是否相同可通过keySet().equals()实现,如map1.keySet().equals(map2.keySet())返回true表示键集相同(顺序无关);需先判空避免NullPointerException;不同Map类型间也可比较;若需判断子集关系可用containsAll。