if(listStr.size == 0){与if(listStr.isEmpty()){

blu*_*sky 27 java

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())代码库?有没有理由以这种方式检查我不知道?

enz*_*m83 28

这个问题的答案可以给你答案.基本上,在某些列表的实现中,该方法isEmpty()检查大小是否为零(因此从性能的角度来看它们实际上是等效的).但是,在其他类型的列表(例如链接列表)中,计数项目需要的时间多于检查它是否为空.

因此,使用该方法isEmpty()检查列表是否为空总是很方便.为这在所有类型的列表被提供这样的方法也涉及到的接口,由于原因ArrayList,VectorLinkedList实现相同的List接口:该接口具有isEmpty()方法; 然后,每个特定类型的列表提供其isEmpty()方法的实现.

  • 很好的答案,只有一条评论:LinkedList的size()实现不会遍历列表,而是在添加或删除新元素时跟踪大小.因此,LinkedLists的size()与isEmpty()(它们从AbstractCollection继承)的性能完全没有区别.话虽如此,我同意可能有数据结构的size()实现比isEmpty()慢,但合理的实现不会..另外,我相信你也可以在这里提到DRY原则作为检查是否在大多数isEmpty()方法中,size()== 0已经为你完成了. (2认同)

JB *_*zet 12

不,没有理由.isEmpty()更清楚地表达意图,应该是首选.PMD甚至有这样的规则.但这并不重要.


Jul*_*ren 7

.size()可以是O(1)或O(N),具体取决于数据结构; .isEmpty()永远不是O(N).