• 实际工程中加快 Java 代码编写的小提示


    这里我简单谈谈 Java 语法在编程效率方面的弱势,以及如何补救。

    一、集合的快速创建

    C# 是少数拥有集合字面值(又叫初始化表达式)的静态语言之一。

    var list = new List<int> {1, 2, 3};
    var set = new HashSet<int> {1, 2, 3};
    var map = new Dictionary<int, int> {{1, 2}, {2, 3}, {3, 4}};
    

    在 Java 中如果想要达到相同效果,可以用List/Set/Map.of()工厂方法。如果是 Java 9 以下的版本,可以用 Guava 中的ImmuatableList/Set/Map.of()

    List<Integer> list = ImmutableList.of(1, 2, 3);
    Set<Integer> set = ImmutableSet.of(1, 2, 3);
    Map<Integer, Integer> map = ImmutableMap.of(1, 2, 2, 3, 3, 4);
    

    要注意它们是不可变的。如果要创建可变集合,可以将其再赋给集合构造器:

    List<Integer> list = new ArrayList<>(ImmutableList.of(1, 2, 3));
    

    读写器的快速创建

    C# 拥有自动属性,可以自动创建默认行为的属性,和背后的字段:

    public class User
    {
        public int Id {get; set;}
        public string Username {get; set;}
        public string Password {get; set;}
        public string Phone {get; set;}
    }
    

    Java 特性不支持这样,但可以使用 Lombok 插件的@Data注解,来快速创建一个这样的数据类(类似 Kotlin 的 DataClass 特性):

    @Data
    public class User 
    {
        private int id;
        private String username;
        private String password;
        private String phone;
    }
    

    然后你就可以使用它们的读写器了:

    User u = new User();
    u.setId(1);
    u.setUsername("wizard");
    u.setPassword("xxxxxx");
    u.setPhone("13xxxxxxxxx");
    

    三、对象的快速创建

    C# 再次支持对象字面值,它在背后调用相应构造器和属性:

    var u = new User() {
        Id=1, 
        Username="wizard", 
        Password="xxxxxx", 
        Phone="13xxxxxxxxx"
    };
    

    Java 这边,可以使用 Lombok 的@Builder注解:

    @Data
    @Builder
    public class User 
    {
        //...
    }
    

    然后:

    User u = User.builder()
        .id(1)
        .username("wizard")
        .password("xxxxxx")
        .phone("13xxxxxxxxx")
        .build()
    

    更多

    未完待续...

  • 相关阅读:
    模拟+bfs——cf1344D
    【留坑】模拟+极角排序+预处理——ICPC PNWRC 2019 H
    【好题】思维+几何+离散化——ICPC PNWRC 2019 G
    【难】组合数学+dp——ICPC PNWRC 2019
    【好题】导数+统计贡献+扫描—— icpc PNWRC 2019
    【模板】二分图匹配+构造+最大独立集——icpc PNWRC 2019
    [Scoi2014]方伯伯的OJ(动态开点splay)
    [ZJOI2006]书架(二分+树状数组)
    [TJOI2017]不勤劳的图书管理员(分块+树状数组)
    [APIO2016]Gap(交互)
  • 原文地址:https://www.cnblogs.com/apachecn/p/13443356.html
Copyright © 2020-2023  润新知