Questions tagged «initialization»

30
一行初始化ArrayList
我想创建用于测试目的的选项列表。首先,我这样做: ArrayList<String> places = new ArrayList<String>(); places.add("Buenos Aires"); places.add("Córdoba"); places.add("La Plata"); 然后,我将代码重构如下: ArrayList<String> places = new ArrayList<String>( Arrays.asList("Buenos Aires", "Córdoba", "La Plata")); 有一个更好的方法吗?


30
如何初始化静态地图?
您将如何Map在Java中初始化静态变量? 方法一:静态初始化器 方法二:实例初始化器(匿名子类)或其他方法? 各自的优缺点是什么? 这是说明两种方法的示例: import java.util.HashMap; import java.util.Map; public class Test { private static final Map<Integer, String> myMap = new HashMap<>(); static { myMap.put(1, "one"); myMap.put(2, "two"); } private static final Map<Integer, String> myMap2 = new HashMap<>(){ { put(1, "one"); put(2, "two"); } }; }

12
如何直接初始化HashMap(以字面方式)?
有没有办法像这样初始化Java HashMap? Map<String,String> test = new HashMap<String, String>{"test":"test","test":"test"}; 正确的语法是什么?我还没有发现任何有关此的信息。这可能吗?我正在寻找在地图中放置一些“最终/静态”值的最短/最快方法,这些值永远不会改变,并且在创建地图时会事先知道。


15
Java“双括号初始化”的效率?
Наэтотвопросестьответына 堆栈溢出нарусском:Чтотакое双括号инициализация? 在Java的“ 隐藏功能”中,最常见的答案是Double Brace Initialization,其语法非常诱人: Set<String> flavors = new HashSet<String>() {{ add("vanilla"); add("strawberry"); add("chocolate"); add("butter pecan"); }}; 此成语创建一个匿名内部类,其中仅包含一个实例初始化程序,该实例“可以使用包含范围中的任何方法”。 主要问题:这听起来像效率低下吗?它的使用是否应仅限于一次性初始化?(当然还有炫耀!) 第二个问题:新的HashSet必须是实例初始化程序中使用的“ this”……任何人都可以阐明该机制吗? 第三个问题:这个习惯用法是否太晦涩,无法在生产代码中使用? 摘要:非常非常好的答案,谢谢大家。在问题(3)上,人们认为语法应该明确(尽管我建议您偶尔发表评论,尤其是如果您的代码会传递给可能不熟悉它的开发人员时)。 关于问题(1),生成的代码应快速运行。多余的.class文件确实会导致jar文件混乱,并且会稍微减慢程序启动的速度(这要感谢@coobird进行测量)。@Thilo指出垃圾回收可能会受到影响,并且在某些情况下,额外加载的类的内存成本可能是一个因素。 问题(2)对我来说最有趣。如果我理解答案,那么DBI中发生的事情是匿名内部类扩展了new运算符正在构造的对象的类,因此具有引用此构造实例的“ this”值。井井有条。 总的来说,DBI令我感到好奇。Coobird和其他人指出,使用Arrays.asList,varargs方法,Google Collections和建议的Java 7 Collection文字可以实现相同的效果。较新的JVM语言(例如Scala,JRuby和Groovy)还为列表构建提供了简洁的符号,并且可以与Java很好地互操作。鉴于DBI会使类路径混乱,使类加载速度变慢,并使代码更加模糊,我可能会回避它。但是,我打算将这个介绍给一个刚刚获得SCJP并且喜欢Java语义的自然风趣的朋友!;-) 谢谢大家! 7/2017:Baeldung 对双括号初始化有很好的总结,并认为它是反模式。 12/2017:@Basil Bourque指出在新的Java 9中您可以说: Set<String> flavors = Set.of("vanilla", "strawberry", "chocolate", "butter pecan"); 那肯定是要走的路。如果您使用的是早期版本,请查看Google Collections的ImmutableSet。



17
如何在C ++中初始化私有静态成员?
在C ++中初始化私有静态数据成员的最佳方法是什么?我在头文件中尝试了此操作,但它给了我奇怪的链接器错误: class foo { private: static int i; }; int foo::i = 0; 我猜这是因为我无法从类外部初始化私有成员。那么最好的方法是什么?

14
如何根据C编程语言标准初始化结构
我想初始化一个struct元素,拆分为声明和初始化。这就是我所拥有的: typedef struct MY_TYPE { bool flag; short int value; double stuff; } MY_TYPE; void function(void) { MY_TYPE a; ... a = { true, 15, 0.123 } } 这是MY_TYPE按照C编程语言标准(C89,C90,C99,C11等)声明和初始化局部变量的方法吗?还是有什么更好的方法,或者至少是可行的方法? 更新我最终得到了一个静态初始化元素,在其中根据需要设置了每个子元素。
465 c  struct  initialization 

10
如何在Java中初始化数组?
我正在初始化这样的数组: public class Array { int data[] = new int[10]; /** Creates a new instance of Array */ public Array() { data[10] = {10,20,30,40,50,60,71,80,90,91}; } } NetBeans在此行指出一个错误: data[10] = {10,20,30,40,50,60,71,80,90,91}; 我该如何解决这个问题?



25
在循环之前或循环中声明变量之间的区别?
我一直想知道,一般而言,在循环之前声明一个抛弃型变量(而不是在循环内部重复)是否会产生(性能)差异?Java中的一个(毫无意义的)示例: a)循环前声明: double intermediateResult; for(int i=0; i < 1000; i++){ intermediateResult = i; System.out.println(intermediateResult); } b)循环内的声明(反复): for(int i=0; i < 1000; i++){ double intermediateResult = i; System.out.println(intermediateResult); } a或b哪个更好? 我怀疑重复变量声明(示例b)在理论上会增加开销,但编译器足够聪明,因此无关紧要。示例b的优点是更紧凑,并将变量的范围限制在使用它的位置。尽管如此,我还是倾向于根据示例a进行编码。 编辑:我对Java案例特别感兴趣。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.