大多数拥有CS学位的人肯定会知道Big O代表什么.它可以帮助我们衡量算法的实际效率(如何),如果你知道你试图解决的问题属于哪个类别,你可以弄清楚是否仍然可以挤出那么少的额外性能.1
但我很好奇,你如何计算或近似算法的复杂性?
1 但正如他们所说,不要过度,过早优化是所有邪恶的根源,没有正当理由的优化也应该得到这个名称.
我有两种方法可以检查List是否为空
if (CollectionUtils.isNotEmpty(listName))
Run Code Online (Sandbox Code Playgroud)
和
if (listName != null && listName.size() != 0)
Run Code Online (Sandbox Code Playgroud)
我的拱门告诉我,前者比后者好.但我认为后者更好.
有人可以澄清一下吗?
为什么list.size()>0比list.isEmpty()Java 慢?换句话说,为什么isEmpty()更好size()>0?
当我查看实现时ArrayList,看起来速度应该是相同的:
ArrayList.size()
/**
* Returns the number of elements in this list.
*
* @return the number of elements in this list
*/
public int size() {
return size;
}
Run Code Online (Sandbox Code Playgroud)
ArrayList.isEmpty()
/**
* Returns <tt>true</tt> if this list contains no elements.
*
* @return <tt>true</tt> if this list contains no elements
*/
public boolean isEmpty() {
return size == 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我们只是编写一个简单的程序来获取两种方法所需的时间,那么在所有情况下size()都需要更多的isEmpty()时间,为什么会这样呢?
这是我的TestCode;
import …Run Code Online (Sandbox Code Playgroud) List<String> listStr = new ArrayList<String>();
if(listStr.size == 0){
}
Run Code Online (Sandbox Code Playgroud)
与
if(listStr.isEmpty()){
}
Run Code Online (Sandbox Code Playgroud)
在我看来,使用的一个好处listStr.isEmpty()是它不检查列表的大小,然后将其与零进行比较,它只是检查列表是否为空.是否还有其他优点,我经常看到if(listStr.size == 0)而不是if(listStr.isEmpty())代码库?有没有理由以这种方式检查我不知道?
我必须处理NullPointerException正在发生的情况Hashmap。我应该在条件内使用map.isEmpty()或(map.size() > 0)if吗?
哪一个更好?
java ×4
algorithm ×1
big-o ×1
collections ×1
is-empty ×1
list ×1
optimization ×1
performance ×1