Raj*_*ana 8 java collections initialization
我们知道我们可以通过使用双括号初始化来初始化java中的集合.并对此进行了一些搜索,发现由于其性能问题,不建议使用它.
private static final Set<String> VALID_CODES = new HashSet<String>() {{
add("XZ13s");
add("AB21/X");
add("YYLEX");
add("AR2D");
}};
Run Code Online (Sandbox Code Playgroud)
只是想知道,双支撑初始化有任何积极的一面或优势吗?
不建议使用它,因为它的性能问题.
我没有看到任何性能问题.每当你看到有人说我出于性能原因而做了/没有做某事时,你应该期待看到详细的分析,比较解释如何满足特定要求的性能而另一个没有满足的替代方案.如果你没有看到这一切,你可能会认为作者只是在猜测.
编辑:虽然我承认每个类需要花费少量时间来加载,但运行性能完全相同.我在这里演示了 /sf/answers/1023908791/
如果您认为它更简单,更清晰,我会使用双括号表示法.
缺点是您正在更改集合的类型,这可能会混淆不期望的函数.例如等于.
注意:正如Lukas Eder指出的那样,如果你在非静态环境中这样做,你要小心.匿名子类集合将隐式地具有对外部实例的引用,并且如果它比集合长,则这将是内存泄漏. 你有没有想过内存泄漏的可能性?