代码之家  ›  专栏  ›  技术社区  ›  Chris Dutrow

静态数据结构

  •  0
  • Chris Dutrow  · 技术社区  · 15 年前

    有没有办法在编译时创建映射或设置类型数据结构?

    我之所以这么问是因为我正在使用App Engine,我有一些数据结构需要排序和搜索,但它们是恒定的,所以我想避免在启动时创建它们的时间成本。

    4 回复  |  直到 15 年前
        1
  •  3
  •   DJClayworth    15 年前

    与任何类型的性能优化一样,首先要问自己,在运行时设置这些结构所花费的时间是否真正影响性能。你的建筑面积有多大?他们需要多长时间才能建立起来?如果你还没有测量过你正在从事的 ,我们知道这是万恶之源。

    假设你已经做到了,那么让我们看看选择。你真的能节省多少时间?你最好的办法是用某种形式 序列化

        2
  •  2
  •   duffymo    15 年前

    如果您使用的是Spring,那么您可以在配置中创建和填充这些数据结构并缓存它们,但是我不知道如何避免在运行时创建和填充它们。你必须在某个时候运行代码。对我来说,听起来像是成熟前的优化。

        3
  •  1
  •   DeliveryNinja    15 年前

    cron job link

    然后可以在静态代码块中定义列表,该代码块将在应用程序首次运行时缓存

    private static List<Object> list = new ArrayList<Object>();
    
    static {
        for(Value value : getValues()){
            list.add(value);
        }
    }
    

    另见 spring annotations 对于post-construct,您可以在非静态环境中使用@PostConstruct对方法进行注释,这样在创建对象时将执行该方法。

        4
  •  1
  •   Luke Hutteman    15 年前

    也就是说,可以像这样声明和初始化集合:

    private static Set<String> set = new HashSet<String>(Arrays.asList("abc", "def"));
    

    不过,这仍将在运行时执行。