gpt4 book ai didi

java - 有没有像 List.of() 的 String pool 这样的池系统

转载 作者:行者123 更新时间:2023-12-04 10:17:27 27 4
gpt4 key购买 nike

假设我有以下方法:

private boolean isExist(String key) {
return List.of("a", "b", "c", "d", "e").contains(key);
}

这是否会创建 N 个 List.of("a", "b", "c", "d", "e") N 个方法执行的对象?或者内部有没有像字符串池这样的机制?

最佳答案

"a", "b", "c", "d", "e"将被移动到字符串池中,除非它们已经存在。下次您访问它们中的任何一个(例如,“a”)时,将不会创建任何对象,只是从池中提取。

不过,您所问的与游泳池无关。这很大程度上取决于 List 的实现被退回。它总是可以返回一个新列表(很有可能)或从内部缓存中提取它(这是不可能的,因为它对任意大小的数据结构无效 - 想象一下在这种缓存中查找会有多昂贵)。

Java 9 的实现看起来像

static <E> List<E> of(E e1) {
return new List12(e1);
}

static <E> List<E> of(E e1, E e2) {
return new List12(e1, e2);
}

static <E> List<E> of(E e1, E e2, E e3) {
return new ListN(new Object[]{e1, e2, e3});
}

一些不错的微优化
@SafeVarargs
static <E> List<E> of(E... elements) {
switch(elements.length) {
case 0:
return ImmutableCollections.emptyList();
case 1:
return new List12(elements[0]);
case 2:
return new List12(elements[0], elements[1]);
default:
return new ListN(elements);
}
}

关于java - 有没有像 List.of() 的 String pool 这样的池系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61009699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com