If (listStr.size == 0) {versus if (listStr.isEmpty()) {
List<String> listStr = new ArrayList<String>();
if(listStr.size == 0){
}
против
if(listStr.isEmpty()){
}
На мой взгляд, одним из преимуществ использования listStr.isEmpty()
является то, что он не проверяет размер списка и затем сравнивает его с нолем, он просто проверяет, пуст ли список. Есть ли другие преимущества, которые я часто вижу if(listStr.size == 0)
вместо if(listStr.isEmpty())
в кодовых базах? Есть ли причина, по которой она проверена таким образом, о которой я не знаю?
Ответы
Ответ 1
Ответ на этот вопрос мог бы дать вам ответ. В принципе, в реализациях некоторых списков метод isEmpty()
проверяет, равен ли размер (и, следовательно, с точки зрения производительности они практически эквивалентны). Однако в других типах списков (например, связанных списках) подсчет элементов требует больше времени, чем для проверки, является ли он пустым или нет.
По этой причине всегда удобно использовать метод isEmpty()
, чтобы проверить, пуст ли список. Причины, по которым такой метод предоставляется во всех типах списков, также связаны с интерфейсом, поскольку ArrayList
, Vector
и LinkedList
реализуют один и тот же интерфейс List
: этот интерфейс имеет метод isEmpty()
; то каждый конкретный тип списка обеспечивает реализацию метода isEmpty()
.
Ответ 2
Нет, нет причин. isEmpty()
выражает намерение более четко и должно быть предпочтительным. PMD даже правило для этого. Однако это не имеет большого значения.
Ответ 3
.size()
может быть O (1) или O (N), в зависимости от структуры данных; .isEmpty()
никогда не O (N).