相关疑难解决方法(0)

从数组创建ArrayList

我有一个初始化的数组,如:

Element[] array = {new Element(1), new Element(2), new Element(3)};
Run Code Online (Sandbox Code Playgroud)

我想将此数组转换为ArrayList类的对象.

ArrayList<Element> arraylist = ???;
Run Code Online (Sandbox Code Playgroud)

java arrays arraylist type-conversion

3441
推荐指数
31
解决办法
144万
查看次数

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万
查看次数

为什么Java不提供运算符重载?

从C++到Java,明显没有答案的问题是为什么Java不包含运算符重载?

是不是Complex a, b, c; a = b + c;比简单得多Complex a, b, c; a = b.add(c);

是否存在已知的原因,有效的论据,使运算符重载?这个理由是武断的,还是输给了时间?

c++ java operator-overloading

394
推荐指数
10
解决办法
16万
查看次数

如何快速方便地创建一个元素arraylist

是否有一个实用方法可以在一行中执行此操作?我无法在任何地方找到它Collections,或者List.

public List<String> stringToOneElementList(String s) {
    List<String> list = new ArrayList<String>();
    list.add(s);
    return list;
}
Run Code Online (Sandbox Code Playgroud)

除非我打算在上面放上花哨的轮辋,否则我不想重新发明轮子.

嗯......类型可以T,而不是String.但你明白了.(所有空检查,安全检查......等)

java collections arraylist

290
推荐指数
7
解决办法
25万
查看次数

ArrayList初始化等效于数组初始化

我知道您可以在实例化期间初始化数组,如下所示:

String[] names = new String[] {"Ryan", "Julie", "Bob"};
Run Code Online (Sandbox Code Playgroud)

有没有办法用ArrayList做同样的事情?或者我必须单独添加内容array.add()吗?

java arrays initialization arraylist

258
推荐指数
7
解决办法
20万
查看次数

如何使用值声明ArrayList?

Java中的ArrayList或List声明质疑并回答了如何声明一个空,ArrayList但是如何声明一个带有值的ArrayList?

我尝试了以下但它返回语法错误:

import java.io.IOException;
import java.util.ArrayList;

public class test {
    public static void main(String[] args) throws IOException {
        ArrayList<String> x = new ArrayList<String>();
        x = ['xyz', 'abc'];
    }
}
Run Code Online (Sandbox Code Playgroud)

java initialization arraylist declare

189
推荐指数
6
解决办法
45万
查看次数

List.of和Arrays.asList有什么区别?

Java 9为列表引入了一种新的工厂方法List.of:

List<String> strings = List.of("first", "second");
Run Code Online (Sandbox Code Playgroud)

前一个和新选项有什么区别?也就是说,这有什么区别:

Arrays.asList(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

还有这个:

List.of(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

java list java-9

95
推荐指数
5
解决办法
2万
查看次数

使用某些预定义值初始化ArrayList

我有一个示例程序,如图所示.

我希望我ArrayList symbolsPresent用一些预定义的符号初始化:ONE,TWO,THREE和FOUR.

symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
Run Code Online (Sandbox Code Playgroud)

import java.util.ArrayList;

public class Test {

    private ArrayList<String> symbolsPresent = new ArrayList<String>();

    public ArrayList<String> getSymbolsPresent() {
        return symbolsPresent;
    }

    public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
        this.symbolsPresent = symbolsPresent;
    }

    public static void main(String args[]) {    
        Test t = new Test();
        System.out.println("Symbols Present is" + t.symbolsPresent);

    }    
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?

java

60
推荐指数
7
解决办法
19万
查看次数

如何在一行中初始化静态ArrayList <myclass>

我有MyClass

MyClass(String, String, int);
Run Code Online (Sandbox Code Playgroud)

我知道如何以这种方式添加到ArrayList:

MyClass.name = "Name";
MyClass.address = "adress";adress
MyClass.age = age;
Run Code Online (Sandbox Code Playgroud)

然后添加到arrayList,如:

list.add(MyClass);
Run Code Online (Sandbox Code Playgroud)

但现在我有很多以静态形式存在的对象MyClass,我想添加

ArrayList<MyClass> list = new ArrayList<MyClass>({"Name","Address", age};.....);
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗 谢谢,无论如何

java

25
推荐指数
3
解决办法
5万
查看次数

在Java 9中重载的方便工厂方法的重点是什么?

Java 9附带了用于创建不可变列表的便捷工厂方法.最后,列表创建非常简单:

List<String> list = List.of("foo", "bar");
Run Code Online (Sandbox Code Playgroud)

但是这个方法有12个重载版本,11个有0到10个元素,另一个有var args.

static <E> List<E>  of(E... elements)
Run Code Online (Sandbox Code Playgroud)

同样是与案件SetMap.

由于存在var args方法,有多少11种方法有什么意义呢?

我认为var-args创建一个数组,所以其他11个方法可以跳过创建一个额外的对象,在大多数情况下会有0-10个元素.还有其他原因吗?

java collections variadic-functions java-9

25
推荐指数
3
解决办法
1801
查看次数