相关疑难解决方法(0)

在一行中初始化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万
查看次数

如何通过构造初始化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万
查看次数

为什么Guava的ImmutableList有这么多重载的()方法?

我只是看着番石榴ImmutableList,我注意到这个of()方法超载了12次.

在我看来,他们所需要的只是:

static <E> ImmutableList<E> of();
static <E> ImmutableList<E> of(E element); // not even necessary
static <E> ImmutableList<E> of(E... elements);
Run Code Online (Sandbox Code Playgroud)

有这么多类似变化的原因是什么?

java overloading guava

38
推荐指数
2
解决办法
2004
查看次数

为什么EnumSet有很多重载的"方法"?

在浏览EnumSet<E> of方法时,我看到了多个of方法的重载实现:

public static <E extends Enum<E>> EnumSet<E> of(E e)

public static <E extends Enum<E>> EnumSet<E> of(E e1, E e2)

.
.

public static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3, E e4, E e5)
Run Code Online (Sandbox Code Playgroud)

然后用另一个重载方法 varargs

public static <E extends Enum<E>> EnumSet<E> of(E first, E... rest) {
    EnumSet<E> result = noneOf(first.getDeclaringClass());
    result.add(first);
    for (E e : rest)
        result.add(e);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

当这个varargs可以处理其他实现时,为什么这个方法会以这种方式重载?这有什么具体原因吗?

我曾经历过同样的Javadoc,但我找不到任何令人信服的解释.

java collections enumset

33
推荐指数
4
解决办法
1135
查看次数

Java 9,Set.of()和Map.of()varargs重载

我正在研究Immutable收藏的工厂方法.我看到该Set.of()方法有10个varargs重载(相同Map.of()).我真的不明白为什么会这么多.最后,ImmutableCollections.SetN<>(elements)无论如何都会调用该函数.

在文档中我发现了这个:

虽然这会在API中引入一些混乱,但它避免了varargs调用引起的数组分配,初始化和垃圾收集开销.

杂乱的确是值得的性能提升吗?如果是,理想情况下是否会为任何N元素创建单独的方法?

java collections java-9

24
推荐指数
2
解决办法
2367
查看次数

如果元素是重复的,为什么Set.of()会抛出IllegalArgumentException?

在Java 9中,在Set接口上引入了新的静态工厂方法,称为of(),它接受多个元素,甚至是一个元素数组.

我想将一个列表转换为一个集合,以删除集合中的任何重复条目,这可以通过以下方式完成(在Java 9之前):

Set<String> set = new HashSet<>();
set.addAll(list);
Run Code Online (Sandbox Code Playgroud)

但是我认为使用这个新的Java 9静态工厂方法会很酷:

Set.of(list.toArray())
Run Code Online (Sandbox Code Playgroud)

其中list是先前定义的字符串列表.

但是,唉,java扔了一个IllegalArgumentException元素重复的时候,也在方法的Javadoc中说明了.为什么是这样?

编辑:这个问题不是关于概念上等效主题的另一个问题的重复,Map.of()方法,但明显不同.并非所有()方法的静态工厂都表现相同.换句话说,当我问一些关于Set.of()方法的东西时,我不会点击处理Map.of()方法的问题.

java collections set java-9

17
推荐指数
4
解决办法
1327
查看次数

有什么用Map.ofEntries()而不是Map.of()

Map.java的文档-

Map.of()Map.ofEntries()静态工厂方法提供了一种方便的方法来创建不可改变的地图.

但是当我已经可以使用重载方法时 ......

Map.of("k1","v1","k2","v2","k3","v3"...);
Run Code Online (Sandbox Code Playgroud)

... Map.ofEntries的用途是什么呢?

返回包含从给定条目中提取的键和值的不可变映射,并且条目本身不存储在映射中.

java hashmap java-9

10
推荐指数
3
解决办法
7948
查看次数