如果您已经知道该集合不为null,那么对性能有什么好处。
使用Apache Commons lib中的<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/noHistroySign"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:gravity="center"
android:background="@drawable/sign"
/>
....
或!collection.isEmpty()
或者没有任何性能差异?
答案 0 :(得分:6)
CollectionUtils.isNotEmpty的代码(假设我们在这里谈论Apache Commons)......
public static boolean isEmpty(Collection coll)
{
return ((coll == null) || (coll.isEmpty()));
}
public static boolean isNotEmpty(Collection coll)
{
return (!(isEmpty(coll)));
}
...所以,没有什么区别,一次空检查不会成为你的瓶颈; - )
答案 1 :(得分:4)
其他答案是正确的,但只是为了确定:
你为什么要关心?您的应用程序是否存在性能问题;并仔细分析指出该方法;所以你在寻找替代品?
因为......如果不是......那么它可能就是我们正在关注的 PrematureOptimization。
还有另外一个方面:if&#34; java标准库&#34;提供一个功能;我总是喜欢他们来自外部图书馆的东西&#34;。 当然,ApacheCommons现在很公共;但是我只会添加对它的依赖...如果我所有其他代码都已经使用它了。
答案 2 :(得分:1)
差异可以忽略不计(额外的空检查),即使是C1编译器也可以轻松地内联所有调用。一般来说,您不应该担心这些简单方法的性能。即使其中一个慢两倍,它仍然比你的应用程序的其余代码快得多。
答案 3 :(得分:0)
Collection.isEmpty作为在apache libs中定义的CollectionUtils间接使用collection.isEmpty()方法。
虽然两者都没有显着差异,但仅仅是
CollectionUtils.isEmpty
是NullSafe
,正如你所说,你知道集合不是空的,所以两者都同样好(几乎)
答案 4 :(得分:0)
使用以下程序,您可以在列表中看到1000 Integer的清晰结果。 注意:时间以毫秒为单位
collection.isEmpty几乎是0毫秒
CollectionsUtils.isNotEmpty需要78毫秒
public static void main(String[] args){
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i<1000; i++)
list.add(i);
long startTime = System.currentTimeMillis();
list.isEmpty();
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println(totalTime);
long startTime2 = System.currentTimeMillis();
CollectionUtils.isNotEmpty(list);
long endTime2 = System.currentTimeMillis();
long totalTime2 = endTime2 - startTime2;
System.out.println(totalTime2);
}