知道我们可以通过使用双括号初始化来初始化java中的集合。对此进行了一些搜索,发现由于其性能问题,不建议使用它。
private static final Set<String> VALID_CODES = new HashSet<String>() {{
add("XZ13s");
add("AB21/X");
add("YYLEX");
add("AR2D");
}};
只是想知道,双括号初始化有什么积极的一面或优势吗?
由于其性能问题,不建议使用它。
我没有看到任何性能问题。每当您看到有人说我出于性能原因做了/没有做某事时,您应该期望看到详细的分析,比较替代方案,解释一个方案如何满足特定的性能要求,而另一个则没有。如果您没有看到所有这些,您可能会认为作者只是猜测。
编辑:虽然我承认每个类需要少量的时间来加载,但运行性能是完全相同的。我已经在这里演示了https://stackoverflow.com/a/14627268/57695 https://stackoverflow.com/a/14627268/57695
如果您认为双括号表示法更简单、更清晰,我会使用它。
缺点是您正在更改集合的类型,这可能会在不期望的情况下混淆函数。例如等于。
注意:正如 Lukas Eder 指出的那样,如果在非静态上下文中执行此操作,您需要小心。匿名子类集合将隐式地引用外部实例,如果它的寿命比集合长,这将是内存泄漏。你有没有想过内存泄漏的可能性? http://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-pattern/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)