Java SE 19 新增特性
发布时间:2023-04-15 11:24:46 所属栏目:教程 来源:
导读:Java SE 19,构造哈希表的时候,由于有扩容因子 0.75 的设置,所以如果要开辟一个 120 空间的哈希表,需要如下定义
Map<Integer,Integer> map1 = new HashMap<>(160);
Java SE 19 中,HashMap 有了新的构造方法,
Map<Integer,Integer> map1 = new HashMap<>(160);
Java SE 19 中,HashMap 有了新的构造方法,
|
Java SE 19,构造哈希表的时候,由于有扩容因子 0.75 的设置,所以如果要开辟一个 120 空间的哈希表,需要如下定义 Map<Integer,Integer> map1 = new HashMap<>(160); Java SE 19 中,HashMap 有了新的构造方法,可以用 newHashMap 直接指定具体大小,不需要提前做换算。 这个用法类似 Guava 的集合构造方式。 如上例,可以使用 Map<Integer, Integer> map2 = HashMap.newHashMap(120); 代码如下 import java.util.*; public class NewHashMapMethodTest { public static void main(String[] arg) { // jdk 19之前 // 由于有 扩容因子 0.75 的设置,所以如果要开辟一个120的哈希表,需要如下定义 Map<Integer,Integer> map1 = new HashMap<>(160); for (int i = 0; i < 10; i++) { map1.put(i,i); } System.out.println(map1); // jdk 19及以后 // 可以用newHashMap直接指定具体大小,不需要提前做换算 Map<Integer, Integer> map2 = HashMap.newHashMap(120); for (int i = 0; i < 10; i++) { map2.put(i,i); } System.out.println(map2); } } switch 类型匹配增强(第三次预览) 首次引入这个功能是在Java SE 17 switch (obj) { case String s && s.length() > 5 -> System.out.println(s.toupperCase())。 ... } 我们可以在 switch 语句中检查一个对象是否属于某个特定的类,以及它是否有额外的特征(比如在例子中:长于五个字符)。 在 Java SE 19 中,我们必须使用新的关键字 when 来代替 && 完整代码如下 package git.snippets.jdk19; /** * switch 增强 第三次预览 * 需要增加 --enable-preview参数 * * @author <a href="mailto:">Grey</a> * @date 2022/9/22 * @since 19 */ public class SwitchEnhancedTest { public static void main(String[] args) { checkObjSince19("hello world"); } public static void checkObjSince19(Object when) { // when 是一个所谓的 "上下文关键字",因此只在一个 case 标签中具有意义。如果你的代码中有名称为 "when "的变量或方法,你不需要改变它们。 switch (when) { case String s when s.length() > 5 -> System.out.println(s.toupperCase()); case String s -> System.out.println(s.toLowerCase()); case Integer i -> System.out.println(i * i); default -> { } } } } when 是一个所谓的 "上下文关键字",因此只在一个 case 标签中具有意义。如果你的代码中有名称为 "when "的变量或方法,你不需要改变它们。 record 的匹配增强(预览功能) switch 和 instanceof 的增强匹配(Java SE 16 新增特性)功能现在可以用于 record,示例代码如下 package git.snippets.jdk19; /** * record 模式匹配增强 * 需要增加 --enable-preview参数 * * @author <a href="mailto:">Grey</a> * @date 2022/9/22 * @since 19 */ public class RecordTest { public static void main(String[] args) { Points points = new Points(1, 2); Line line = new Line(new Points(1, 2), new Points(3, 4)); printPoints(points); printLine(line); } private static void printPoints(Object object) { if (object instanceof Points(int x,int y)) { System.out.println("jdk 19 object is a position, x = " + x + ", y = " + y); } if (object instanceof Points points) { System.out.println("pre jdk 19 object is a position, x = " + points.x() + ", y = " + points.y()); } switch (object) { case Points position -> System.out.println("pre jdk 19 object is a position, x = " + position.x() + ", y = " + position.y()); default -> throw new IllegalStateException("Unexpected value: " + object); } switch (object) { case Points(int x,int y) -> System.out.println(" jdk 19 object is a position, x = " + x + ", y = " + y); default -> throw new IllegalStateException("Unexpected value: " + object); } } public static void printLine(Object object) { if (object instanceof Line(Points(int x1,int y1),Points(int x2,int y2))) { System.out.println("object is a path, x1 = " + x1 + ", y1 = " + y1 + ", x2 = " + x2 + ", y2 = " + y2); } switch (object) { case Line(Points(int x1,int y1),Points(int x2,int y2)) -> System.out.println("object is a path, x1 = " + x1 + ", y1 = " + y1 + ", x2 = " + x2 + ", y2 = " + y2); // other cases ... default -> throw new IllegalStateException("Unexpected value: " + object); } } } record Points(int x, int y) { } record Line(Points from, Points to) { } (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
