在本系列文章中,我比较了编写相同功能的不同方法。上一篇文章比较了 collections.singletonlist 和 arraylist 创建单元素列表。
在这篇文章中,我将比较 collections.singletonlist 和另一个著名的工厂方法 list.of。
集合::singletonlist
方法签名
公共静态 list singletonlist(t o)
public static void main(string[] args) {
final var addresses = collections.singletonlist(
new address(
"742 evergreen terrace",
"springfield",
"new york",
"13468",
"us"
));
system.out.println(addresses);
}
登录后复制
描述
该方法返回一个仅包含指定对象的不可变列表。它是在 java 1.3 中引入的。上一篇文章介绍了相对 arraylist 的优点,但回顾一下:
内联实现: 在一行中使用所需的元素进行初始化。
不变性: 列表的大小和单个元素的内容无法更改。
内存分配: singletonlist 类仅包含单个元素的一个字段。
cpu 使用率: singletonlist 构造函数接受单个元素作为参数,不需要调整大小或数组操作。
列表
方法签名
静态 list of()
public static void main(string[] args) {
final var addresses2 = list.of(
new address(
"1007 mountain drive",
"bristol township",
"new jersey",
null,
"us"
));
system.out.println(addresses2);
}
登录后复制
描述
list.of(e e) 方法也是一个返回不可修改列表的工厂方法。与仅支持一个元素的 collections.singletonlist(e e) 不同,list.of 支持 0 到 10 个元素,以及具有多个元素的数组。它是在 java 9 中引入的,距 singletonlist 17 年。
有趣的是,与 singletonlist 不同,它有评论:
返回一个不可变列表仅包含指定的对象。
array.of 声明它是一个不可修改的列表:
返回包含一个元素的不可修改列表。
这反映了对集合不变性的新理解。根据此文档:
如果元素无法添加、删除或替换,则集合被认为是不可修改的。然而,只有当集合中包含的元素不可变时,不可修改的集合才是不可变的。
尽管术语存在差异,但这两种工厂方法具有几乎相同的功能。深入查看unmodifyinglist,我们可以发现:
static
return new immutablecollections.list12(e1);
}
令人惊讶的是,他们使用了不太精确的术语不可变,不过!
static final class list12
abstractimmutablelist
@stable
private final e e0;
@stable
private final e e1;
list12(e e0) {
this.e0 = objects.requirenonnull(e0);
this.e1 = null;
}
...
}
登录后复制
static abstract class AbstractImmutableList
AbstractImmutableCollection
// all mutating methods throw UnsupportedOperationException
@Override public void add(int index, E element) { throw uoe(); }
@Override public boolean addAll(int index, Collection extends E> c) { throw uoe(); }
@Override public E remove(int index) { throw uoe(); }
@Override public void replaceAll(UnaryOperator<e> operator) { throw uoe(); }
@Override public E set(int index, E element) { throw uoe(); }
@Override public void sort(Comparator super E> c) { throw uoe(); }
登录后复制
唯一的区别是 list12 有两个字段用于潜在的两个元素,这也导致内存占用可以忽略不计,除非处理大型对象。
结论
这次,我们比较了 collections.singletonlist 和 list.of 工厂方法来创建单元素列表。我们讨论了 immutable 和 unmodifier 的语义,并表明这两种方法都是高效、简洁且占用资源少的。如果您可以使用更新的 java 版本,那么它是最好的,因为它熟悉、清晰,而且因为我们使用 list 接口比 collections 多得多。如果仅限于较旧的 java 版本,collections.singletonlist 仍然是一个不错的选择。
以上就是[代码比较] CollectionssingletonList 与 Listof的详细内容,更多请关注php中文网其它相关文章!
91资源网站长-冰晨2024-08-27 17:15
发表在:【账号直充】爱奇艺黄金VIP会员『1个月』官方直充丨立即到账丨24小时全天秒单!不错不错,价格比官方便宜
91资源网站长-冰晨2024-08-27 16:15
发表在:2022零基础Java入门视频课程不错,学习一下