当前位置: 首页 > 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.jsqmd.com/news/63699/

相关文章:

  • AI 全域营销天花板!这家浙江企业,帮上千家公司打通国内外增长快车道
  • 深入解析:二叉树、动态规划与链表学习
  • 2025年逆流闭式冷却塔五大靠谱供应商推荐,来图定制与制造企
  • 2025年内蒙古十大钢结构工程设计公司推荐:钢结构工程设计公
  • 2025年热门的云南泡沫包装箱/昆明泡沫包装箱厂家选购指南与推荐
  • 2025年12月关键词厂家推荐:行业权威盘点与品质红榜发布
  • 简易的提交限流实现-java
  • 刚入职的AIops菜鸡,应该知道gang-scheduling和binpack调度吗?
  • 2025逆流闭式冷却塔制造商TOP5权威推荐:甄选优质工厂与
  • 2025资质齐全的品牌策划企业TOP5推荐:美御品牌策划实力
  • 2025年评价高的挂通垃圾车/勾臂垃圾车厂家推荐及选购参考榜
  • json字符数
  • CMCC RAX3000Me 23.10 升级 24.10 救砖
  • 2025年比较好的汽车散装设备/散装设备行业内口碑厂家排行榜
  • 2025年比较好的MF库均化设备/IBAU库均化设备TOP品牌厂家排行榜
  • 关键词:
  • 2025年质量好的球化回火炉/密封箱式回火炉TOP实力厂家推荐榜
  • 2025年比较好的ODM/OEM衣帽间收纳最新用户好评榜
  • 深圳继承纠纷律师哪家强?2025年最新避坑指南及5位高口碑律师专业推荐!
  • 2025年口碑好的高纤维狗粮高端品质推荐榜
  • 2025年质量好的挂架厨房收纳专业推荐榜单
  • 中国宝宝肌肤护理产品怎么选?2025年最新市场分析与专业品牌推荐
  • 2025年哈尔滨诚信的汽车贴膜专业公司推荐:看哪家技术可靠?
  • 视频快下:可自动更新的视频下载工具, 一直可以使用
  • 2025年热门的单螺旋压榨机TOP品牌厂家排行榜
  • 短视频直播系统,关于数据关系的正确认知 - 云豹科技
  • 2025 年 12 月立体车库厂家权威推荐榜:智能升降/循环式/机械停车库,空间革新与高效存取解决方案深度解析
  • 家装到底该选哪家?2025年最新市场洞察与一家国企背景综合服务商的深度案例推荐
  • 2025年耐用的6通道测力称重工业型变送器厂家最新推荐排行榜
  • 2026 北京市律师哪家好?权威测评排行榜:5 家机构实力与解决方案解析