作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题很明确。
我有一个列表,我想确保它至少有一个非空元素。而且,没有循环(性能测量)。
list.size()
在这里绝对没有帮助。因为如果列表包含 5 个空值,那么它的大小也将为 5。
请注意,我并不是要一个不能包含 null
的列表。
最佳答案
使用标准 List
无法做到这一点没有循环的实现,无论是显式还是隐式1。 List
不支持此功能API,并且没有任何标准列表类作为专门操作包含在内。
避免循环的唯一方法是创建自定义 List
处理 null
的实现作为特殊,并记录 null
的数量列表中的元素。这种方法的缺点是列表上的更新操作更昂贵,因为它们需要测试以查看是否需要更改计数器。
请注意,使用手动编码的循环通常不会那么昂贵,因为您可以在看到非空元素后立即停止循环。
1 - 如果您关心效率,那么在某些方法中使用隐式循环,例如 Collections.frequency
可能比专门为此目的手动编码的循环要昂贵得多。
跟进
I'm not creating or filling the list. I got the already generated list from some code that I cannot alter.
在那种情况下,像下面这样的循环是最快的可能解决方案:
boolean empty = true;
for (SomeType t : list) {
if (t != null) {
empty = false;
break;
}
}
如果列表是 ArrayList
,索引可能会稍微快一些, 但不适用于 LinkedList
.
关于java - 如何在不循环的情况下检查列表是否至少有一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18767030/
我是一名优秀的程序员,十分优秀!