相关疑难解决方法(0)

在Java 8中,为什么ArrayList的默认容量现在为零?

我记得,在Java 8之前,默认容量ArrayList是10.

令人惊讶的是,对default(void)构造函数的注释仍然说: Constructs an empty list with an initial capacity of ten.

来自ArrayList.java:

/**
 * Shared empty array instance used for default sized empty instances. We
 * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
 * first element is added.
 */
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

...

/**
 * Constructs an empty list with an initial capacity of ten.
 */
public ArrayList() {
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
Run Code Online (Sandbox Code Playgroud)

java arraylist java-8

88
推荐指数
3
解决办法
6万
查看次数

在主体中忽略参数时编写lambda表达式

如果lambda表达式不需要参数,因此它的名称是多余的,我如何编写它?

这种方式不编译:

setRowFactory(-> new TableRowCustom());
Run Code Online (Sandbox Code Playgroud)

但是这个做了:

setRowFactory(__ -> new TableRowCustom());
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

java lambda java-8

27
推荐指数
1
解决办法
1万
查看次数

Java Map computeIfAbsent问题

所以我发现了Java的Map computeIfAbsent(使用java8)方法的好奇心,我希望有人能告诉我为什么会发生这种情况,因为我无法真正遵循该问题背后的逻辑.

所以,我有一个带有键的Map(显然),值是一个列表,当没有设置键时,我使用computeIfAbsent创建一个新列表.现在,当我使用Integer作为键时,我可以使用以下内容:

List<Object> list = map.computeIfAbsent(1, ArrayList::new);
Run Code Online (Sandbox Code Playgroud)

但是当我使用String作为密钥尝试使用时

List<Object> list = map.computeIfAbsent("key", ArrayList::new);
Run Code Online (Sandbox Code Playgroud)

我得到了错误The method computeIfAbsent(String, Function<? super String,? extends List<Object>>) in the type Map<String,List<Object>> is not applicable for the arguments (String, ArrayList::new).是否缺少实施?使用String键我必须使用类似的方法,然后再次使用.

List<Object> list = map.computeIfAbsent("key", k -> new ArrayList<>());
Run Code Online (Sandbox Code Playgroud)

也许有人可以启发我.谢谢 :)

java functional-programming java-8

13
推荐指数
2
解决办法
738
查看次数

ArrayList::new 中不需要的内存不足错误 - 为什么?

我只有50000 个对象时出现内存不足错误。

我检查了computeIfAbsent实现,但不幸的是没有发现任何奇怪的东西。

我的机器配置是16 GBram 和core I7.

public class Test {

    public static void main(String[] args) {
        int count = 50000;
        List<ListObject> list = new ArrayList();
        for (int i = 0; i < count; i++) {
            int key = ThreadLocalRandom.current().nextInt(100000);
            int value = ThreadLocalRandom.current().nextInt(1000000);
            list.add(new ListObject(key, value));
        }
        Map<Integer, List<Integer>> map = new HashMap();
        for (ListObject a : list) {
            map.computeIfAbsent(a.getKey(), ArrayList::new);
        }
        System.out.println("Done");

    }
Run Code Online (Sandbox Code Playgroud)

我的 ListObject 如下:

class ListObject {
    public …
Run Code Online (Sandbox Code Playgroud)

java collections java-8

10
推荐指数
1
解决办法
263
查看次数