标签: initialization

在一行中初始化ArrayList

我想创建一个用于测试目的的选项列表.起初,我这样做了:

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");
Run Code Online (Sandbox Code Playgroud)

然后我重构代码如下:

ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

java collections initialization arraylist

2626
推荐指数
20
解决办法
286万
查看次数

JavaScript检查变量是否存在(定义/初始化)

检查变量是否已初始化的哪种方法更好/更正?(假设变量可以包含任何内容(字符串,整数,对象,函数等))

if (elem) { // or !elem
Run Code Online (Sandbox Code Playgroud)

要么

if (typeof(elem) !== 'undefined') {
Run Code Online (Sandbox Code Playgroud)

要么

if (elem != null) {
Run Code Online (Sandbox Code Playgroud)

javascript variables if-statement initialization undefined

1642
推荐指数
24
解决办法
142万
查看次数

如何初始化静态地图?

你会如何Map在Java中初始化静态?

方法一:静态初始化
方法二:实例初始化(匿名子类)还是其他一些方法?

各自的优点和缺点是什么?

这是一个说明两种方法的示例:

import java.util.HashMap;
import java.util.Map;

public class Test {
    private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
    static {
        myMap.put(1, "one");
        myMap.put(2, "two");
    }

    private static final Map<Integer, String> myMap2 = new HashMap<Integer, String>(){
        {
            put(1, "one");
            put(2, "two");
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

java collections dictionary initialization idiomatic

1084
推荐指数
20
解决办法
82万
查看次数

如何直接初始化HashMap(以字面方式)?

有没有像这样初始化Java HashMap的方法?:

Map<String,String> test = 
    new HashMap<String, String>{"test":"test","test":"test"};
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法?我没有发现任何有关此事的内容.这可能吗?我正在寻找最短/最快的方法,将一些"最终/静态"值放在一个永不改变的地图中,并在创建Map时提前知道.

java collections dictionary initialization

990
推荐指数
9
解决办法
118万
查看次数

964
推荐指数
5
解决办法
11万
查看次数

如何将数组的所有成员初始化为相同的值?

我在C中有一个大数组(如果有所不同,则不是C++).我想将所有成员初始化为相同的值.我发誓我曾经知道一个简单的方法来做到这一点.我可以memset()在我的情况下使用,但是没有办法在C语法中构建这样做吗?

c arrays array-initialize initialization

934
推荐指数
13
解决办法
179万
查看次数

Java"双支撑初始化"的效率?

Java隐藏功能中,最佳答案提到了Double Brace Initialization,它具有非常诱人的语法:

Set<String> flavors = new HashSet<String>() {{
    add("vanilla");
    add("strawberry");
    add("chocolate");
    add("butter pecan");
}};
Run Code Online (Sandbox Code Playgroud)

这个成语创建了一个匿名内部类,其中只包含一个实例初始化程序,"可以使用包含作用域中的任何[...]方法".

主要问题:这听起来效率低吗?它的使用是否应限于一次性初始化?(当然炫耀!)

第二个问题:新的HashSet必须是实例初始化程序中使用的"this"...任何人都可以了解机制吗?

第三个问题:在生产代码中使用这个成语是否过于模糊

简介:非常非常好的答案,谢谢大家.在问题(3)中,人们认为语法应该是清楚的(尽管我建议偶尔发表评论,特别是如果你的代码会传递给可能不熟悉它的开发人员).

在问题(1)上,生成的代码应该快速运行.额外的.class文件会导致jar文件混乱,并且会稍微减慢程序启动速度(感谢@coobird测量它).@Thilo指出垃圾收集可能会受到影响,在某些情况下,额外加载类的内存成本可能是一个因素.

问题(2)对我来说最有趣.如果我理解答案,那么DBI中发生的事情是匿名内部类扩展了由new运算符构造的对象的类,因此具有引用正在构造的实例的"this"值.井井有条.

总的来说,DBI让我感到非常好奇.Coobird和其他人指出,您可以使用Arrays.asList,varargs方法,Google Collections和提议的Java 7 Collection文字获得相同的效果.Scala,JRuby和Groovy等较新的JVM语言也为列表构建提供了简明的符号,并且与Java良好地互操作.鉴于DBI使类路径混乱,减慢了类加载速度,并使代码更加模糊,我可能会回避它.但是,我打算在一位刚刚获得SCJP的朋友身上发表这篇文章,并且喜欢关于Java语义的好朋友!;-) 感谢大家!

7/2017:Baeldung 对双支撑初始化有很好的总结,并认为它是一种反模式.

12/2017:@Basil Bourque指出,在新的Java 9中你可以说:

Set<String> flavors = Set.of("vanilla", "strawberry", "chocolate", "butter pecan");
Run Code Online (Sandbox Code Playgroud)

这肯定是要走的路.如果您遇到早期版本,请查看Google Collections的ImmutableSet.

java collections performance initialization

786
推荐指数
10
解决办法
12万
查看次数

在C#中,我应该使用string.Empty或String.Empty或""来初始化字符串吗?

在C#中,我想用空字符串初始化字符串值.

我该怎么做?什么是正确的方法,为什么?

string willi = string.Empty;
Run Code Online (Sandbox Code Playgroud)

要么

string willi = String.Empty;
Run Code Online (Sandbox Code Playgroud)

要么

string willi = "";
Run Code Online (Sandbox Code Playgroud)

或者是什么?

.net c# string initialization

689
推荐指数
18
解决办法
21万
查看次数

如何通过构造初始化HashSet值?

我需要创建一个Set初始值.

Set<String> h = new HashSet<String>();
h.add("a");
h.add("b");
Run Code Online (Sandbox Code Playgroud)

有没有办法在一行代码中执行此操作?例如,它对最终的静态字段很有用.

java collections constructor initialization hashset

684
推荐指数
15
解决办法
75万
查看次数

使用硬编码元素初始化std :: vector的最简单方法是什么?

我可以创建一个数组并像这样初始化它:

int a[] = {10, 20, 30};
Run Code Online (Sandbox Code Playgroud)

如何创建std::vector和初始化它同样优雅?

我知道的最好方法是:

std::vector<int> ints;

ints.push_back(10);
ints.push_back(20);
ints.push_back(30);
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

c++ stl initialization vector

577
推荐指数
19
解决办法
78万
查看次数