Java8面试

embedded/2025/3/5 0:07:56/

Java 8 有哪些新特性?

🐎Java 8五大神装特性🐎

  1. Lambda表达式(魔法调料)
    曼波觉得像速食魔法咒语!(๑✧◡✧๑)

    // 传统写法(像冗长菜谱)
    new Thread(new Runnable() {public void run() {System.out.println("喵~");}
    }).start();// Lambda写法(像速食包)
    new Thread(() -> System.out.println("喵~")).start();
    
  2. Stream API(数据流水线)
    哦呜(° ロ °)!曼波觉得这是集合的魔法传送带!

    List<String> pets = Arrays.asList("布偶猫", "柯基犬", "仓鼠");
    List<String> 猫猫列表 = pets.stream().filter(s -> s.contains("猫")).collect(Collectors.toList());
    // 结果:[布偶猫]
    
  3. 新的日期API(时间魔法)
    曼波再也不用被Date搞糊涂啦!(๑・.・๑)

    LocalDate 生产日期 = LocalDate.of(2023, 12, 25);
    LocalDate 今天 = LocalDate.now();
    long 保质天数 = ChronoUnit.DAYS.between(生产日期, 今天);
    
  4. 接口默认方法(接口进化)
    接口居然能写具体方法了!✨

    interface 游戏手柄 {default void 震动() {System.out.println("嗡嗡~");}
    }
    
  5. Optional类(空指针护盾)
    曼波的安全感++!(๑✧◡✧๑)

    Optional<String> 钥匙 = Optional.ofNullable(找钥匙());
    钥匙.ifPresent(k -> System.out.println("找到钥匙:" + k));
    
 
 

(° ロ °)!曼波要特别安利两个超好用的技巧:

方法引用魔法:

// 传统Lambda
pets.forEach(s -> System.out.println(s));
// 方法引用版(像直接召唤打印机)
pets.forEach(System.out::println);

构造器引用:

Supplier<List<String>> 创造列表 = ArrayList::new;
List<String> 新列表 = 创造列表.get();

最后的小贴士:这些特性就像新的游戏技能,组合使用效果更佳哦!比如:

LocalDateTime.now().plusDays(7).format(DateTimeFormatter.ISO_DATE); // 一周后的日期

 

(✪▽✪)曼波~~~~!快去用Stream和Lambda写出更优雅的代码吧~

HashMap 在 jdk 1.7 和 1.8 的区别?

🐎HashMap 1.7 vs 1.8 五大进化🐎

  1. 城堡结构升级
    曼波觉得像从平房变成带阁楼的小别墅!(๑✧◡✧๑)

    • 1.7:纯数组+链表(链表像挂在城堡房间外的晾衣绳)
    • 1.8:数组+链表+红黑树(当绳子太长就变成旋转楼梯)
      // 当链表长度>=8时变树,<=6时退化成链表
      static final int TREEIFY_THRESHOLD = 8;
      
  2. 魔法物品存放方式
    哦呜(° ロ °)!曼波发现存放宝箱的方式变了!

    • 1.7:头插法(新宝物放宝箱最上面)
      void addEntry(...) {// 把新节点插到链表头部table[bucketIndex] = new Entry<>(hash, key, value, e);
      }
      
       
    • 1.8:尾插法(新宝物放宝箱最下面)

      final V putVal(...) {// 遍历到链表尾部再插入for (int binCount = 0; ; ++binCount) {if ((e = p.next) == null) {p.next = newNode(...);break;}}
      }
      
  3. 魔法阵扩容优化
    曼波觉得像传送阵升级了!(๑・.・๑)

    • 1.7:扩容后所有元素重新计算位置
    • 1.8:智能判断新位置(原位置 或 原位置+旧容量)
      // 新位置 = 原位置 或 原位置 + oldCapacity
      if ((e.hash & oldCap) == 0) {// 留在低位区
      } else {// 迁移到高位区
      }
      
  4. 哈希魔法公式
    曼波发现咒语更简洁了!✨

    • 1.7:4次位运算+5次异或
      h ^= k.hashCode();
      h ^= (h >>> 20) ^ (h >>> 12);
      h ^= (h >>> 7) ^ (h >>> 4);
      
    • 1.8:1次位运算+1次异或

      (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
      
  5. 死循环问题修复
    (° ロ °)!曼波要放烟花庆祝这个修复!

    • 1.7:头插法扩容可能导致环形链表(多线程下)
    • 1.8:尾插法避免了这个噩梦(但依然线程不安全)

举个超形象的例子🌰:
假设城堡有8个房间(数组),每个房间挂着宝箱(链表)

  • 1.7版:新宝物总是放在宝箱最上面,容易拿但容易缠在一起
  • 1.8版:当宝箱超过8个宝物时,自动变成带编号的旋转书架(红黑树)

最后的小贴士:虽然1.8修复了死循环问题,但多线程环境还是要用ConcurrentHashMap哦!(✪▽✪)曼波~~~~!


http://www.ppmy.cn/embedded/169704.html

相关文章

Qt:窗口

目录 菜单栏 QMenuBar 菜单添加快捷键 添加子菜单 添加分割线和添加图标 QMenuBar创建方式 工具栏 QToolBar 和菜单栏搭配 创建多个工具栏 状态栏 QStatusBar 状态栏中添加其他控件 浮动窗口 QDockWidget 对话框 对话框的内存释放问题 自定义对话框界面 模态对话…

QT异步编程之QtConcurrent

一、概述 1、QtConcurrent模块提供了一组便捷的函数&#xff0c;用于在不显示创建和管理线程的情况下实现并发编程。 2、它通过将任务提交给线程池来执行&#xff0c;从而避免了频繁创建和销毁线程带来的性能开销。 3、QtConcurrent非常适合处理需要并行执行的批量任务&…

Java 泛型(Generics)详解与使用

一、什么是 Java 泛型&#xff1f; 泛型&#xff08;Generics&#xff09;是 Java 1.5 引入的一项重要特性&#xff0c;主要用于 类型参数化&#xff0c;允许在类、接口和方法定义时使用 类型参数&#xff08;Type Parameter&#xff09;&#xff0c;从而提高代码的复用性、类…

java2025热点面试题之springmvc

1. 请解释Spring MVC的工作原理。 答案&#xff1a; Spring MVC是一个基于Java的MVC框架&#xff0c;用于构建Web应用程序。其工作原理如下&#xff1a; 客户端发送请求到DispatcherServlet&#xff0c;它是Spring MVC的前端控制器。DispatcherServlet查询HandlerMapping&…

Spock框架:让单元测试更优雅的高效武器

&#x1f4d6; 前言&#xff1a;为什么选择Spock&#xff1f; 在软件开发领域&#xff0c;单元测试是保证代码质量的基石。但传统的JUnit/TestNG测试框架在面对复杂测试场景时&#xff0c;往往会显得力不从心。Spock框架作为新一代测试框架的佼佼者&#xff0c;以其独特的BDD&…

基于SpringBoot+Vue的医院挂号管理系统+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

Spring Boot 使用过滤器filter

执行流程 在Spring Boot项目中&#xff0c;过滤器&#xff08;Filter&#xff09;的执行流程遵循Servlet规范。具体来说&#xff0c;过滤器是在请求到达目标资源之前和响应返回给客户端之前执行的一系列操作。下面是详细的过滤器执行流程&#xff1a; 初始化阶段: 当Web应用启…

前端面试题最新版

一、Vue 相关 1. 基础题 Vue 2 和 Vue 3 的主要区别是什么&#xff1f; 答案&#xff1a; 响应式系统&#xff1a;Vue 2 使用 Object.defineProperty&#xff0c;Vue 3 使用 Proxy。Composition API&#xff1a;Vue 3 引入了 Composition API&#xff0c;提供了更好的逻辑复用…