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

Java 基础避坑与原理:Scanner、泛型与 ArrayList

内容由AI生成

Java 基础避坑与原理:Scanner、泛型与 ArrayList(含源码验证)

1. Scanner 的“回车符”陷阱

现象:
在使用 Scanner 时,如果先调用 nextInt(),紧接着调用 nextLine(),第二个字符串输入会直接跳过(读到空字符串)。

int num = sc.nextInt();
String str = sc.nextLine(); // 还没输入就结束了?

原理:

  1. 缓冲区残留nextInt() 读取数字后,将结束符(回车 \n)留在了输入缓冲区中。
  2. 读取机制nextLine() 以换行符为结束标志。它刚启动就读取到了残留的 \n,认为一行结束,于是返回空字符串。
  3. 注意next() 会自动跳过空白符,所以没有这个问题。

解决方案:

  • 方案 A:在 nextInt() 后加一句 sc.nextLine() 手动吃掉回车。
  • 方案 B(推荐):统统使用 nextLine() 读取,再通过 Integer.parseInt() 转换,彻底避坑。

2. 泛型与基本类型(ArrayList<int>)

现象:
ArrayList<int> 编译报错,必须写成 ArrayList<Integer>

核心原理:

  1. 类型擦除:Java 泛型是伪泛型,编译后泛型类型会被擦除为 Object
  2. 不兼容:基本类型(int)不是对象,无法转换为 Object,因此泛型不支持基本类型。

面试高频点:

  • 自动装箱/拆箱:编译器自动在 intInteger 间调用 valueOf()intValue()
  • 空指针异常 (NPE)Integer 默认为 null,如果自动拆箱赋值给 int 会崩。
  • Integer 缓存池-128127 之间的数字,Integer.valueOf() 会复用缓存对象。
    • Integer a=100, b=100; a==b (true,走缓存)
    • Integer c=200, d=200; c==d (false,new 新对象)
    • 结论:包装类比较一定要用 .equals()

3. ArrayList 的初始化与扩容机制

疑问: new ArrayList<>() 初始大小是多少?会频繁扩容影响性能吗?

源码真相(JDK 1.8+):

  1. 懒加载机制
    • 执行 new 时,底层数组指向空数组,物理容量为 0
    • 执行第一次 add() 时,才初始化底层数组,容量直接变为 10
  2. 扩容策略
    • 触发时机:数组填满时。
    • 增长幅度1.5 倍。
    • 演变:0 -> 10 -> 15 -> 22 -> 33 ...

源码验证(IDEA实操):
想亲眼确认?按住 Ctrl (Mac 为 Cmd) 点击代码中的 ArrayList 进入源码:

  1. 验证懒加载

    • 搜索构造方法 public ArrayList()
    • 代码this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    • 解读:赋值的是一个空数组,证明初始并未分配内存。
  2. 验证 1.5 倍扩容

    • 搜索 grow(int minCapacity) 方法。
    • 代码int newCapacity = oldCapacity + (oldCapacity >> 1);
    • 解读>> 1 表示右移一位(即除以 2 取整)。
    • 计算示例 (15 -> 22)15 + (15 >> 1) = 15 + 7 = 22
    • (注:Java 整数运算自动舍弃小数部分,并非四舍五入)

性能总结:

  • 由于是倍增策略,数据量越大扩容频率越低,一般场景下不会有严重性能问题。
  • 最佳实践:如果预知数据量(如 1000 条),建议直接指定容量 new ArrayList<>(1000),避免中间的数组拷贝开销。
http://www.rkmt.cn/news/74256.html

相关文章:

  • 深入解析:二叉树、动态规划与链表学习
  • 2025年内蒙古十大钢结构工程设计公司推荐:钢结构工程设计公
  • 2025资质齐全的品牌策划企业TOP5推荐:美御品牌策划实力
  • 2025年比较好的MF库均化设备/IBAU库均化设备TOP品牌厂家排行榜
  • 2025年质量好的球化回火炉/密封箱式回火炉TOP实力厂家推荐榜
  • 中国宝宝肌肤护理产品怎么选?2025年最新市场分析与专业品牌推荐
  • 2025年哈尔滨诚信的汽车贴膜专业公司推荐:看哪家技术可靠?
  • 2025年耐用的6通道测力称重工业型变送器厂家最新推荐排行榜
  • 2025年质量好的循环式提升机/托盘提升机厂家推荐及选购指南
  • 广东惠算GEO:实现零点击获客的AI优化引领者
  • 2025年河南靠谱污水检查井供应商推荐,专业矩形检查井生产厂
  • AiStudio才是Gemini模型的编程真身!
  • 2025年知名的中空板厂家最新权威实力榜
  • 2025年靠谱的净化铝材/圆弧净化铝材实力厂家TOP推荐榜
  • 2025年评价高的不锈钢三节轨厂家最新热销排行
  • 从 ArrayListint 报错这个现象出发,串联起 Java 基础
  • 2026 北京离婚财产律师推荐名单:靠谱机构 VS 精品律所,公正评价性价比之选
  • 2025年度上海圆锯机品牌排名:宏萌圆锯机的交货期长吗?
  • 惠州惠算GEO:自研AI搜索优化,多平台覆盖,转化快本地服务
  • 2025年评价高的伺服减速器/齿轮减速器用户口碑最好的厂家榜
  • 想在赵县老家盖房子,靠谱的自建房公司口碑推荐。河北石家庄赵县自建房公司/机构权威测评推荐排行榜。
  • 想在景县老家农村盖房子,靠谱的自建房公司口碑推荐。河北省衡水市景县自建房公司/机构权威测评推荐排行榜。
  • 2025年质量好的学生公寓床用户好评厂家排行
  • 2025上海房屋装修正规供应商TOP5权威推荐:甄选品牌厂商
  • 完整教程:深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!
  • 短视频系统源码,启动一个node后台服务 - 云豹科技
  • pg 批量数据插入
  • 2025年口碑好的小型台车炉用户口碑最好的厂家榜
  • 2025年哈尔滨汽车隐形车衣品牌与安装店排行榜,信誉好的不错
  • 2025年比较好的年轻人家具/现代家具品牌厂家排行榜