Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果在if条件下使用,hashmap的isEmpty()和size()之间有什么区别?_Java - Fatal编程技术网

Java 如果在if条件下使用,hashmap的isEmpty()和size()之间有什么区别?

Java 如果在if条件下使用,hashmap的isEmpty()和size()之间有什么区别?,java,Java,我必须处理NullPointerException,它发生在Hashmap上。我应该在条件中使用map.isEmpty()还是(map.size()>0)呢 哪个更好?map.size()==0等于map.isEmpty()。例如,IntelliJ IDEA检查始终使用isEmpty()而不是size()==0map.size()==0等于map.isEmpty()。例如,IntelliJ IDEA必须始终使用isEmpty()而不是size()==0以下是size()和isEmpty()类中的

我必须处理
NullPointerException
,它发生在
Hashmap
上。我应该在
条件中使用
map.isEmpty()
还是(
map.size()>0
)呢

哪个更好?

map.size()==0
等于
map.isEmpty()。例如,IntelliJ IDEA检查始终使用
isEmpty()
而不是
size()==0
map.size()==0
等于
map.isEmpty()
。例如,IntelliJ IDEA必须始终使用
isEmpty()
而不是
size()==0
以下是
size()
isEmpty()
类中的

public int size() {
    return size;
}

public boolean isEmpty() {
    return size == 0;
}
因此,
HashMap#isEmpty()
只检查
size
返回的相同
size()
变量。这主要只是一种方便的方法。您可能希望在手动比较大小时使用
isEmpty()
的一个原因是前者使代码实际检查的内容更加清晰。

以下是
HashMap
类中的
大小()
isEmpty()

public int size() {
    return size;
}

public boolean isEmpty() {
    return size == 0;
}

因此,
HashMap#isEmpty()
只检查
size
返回的相同
size()
变量。这主要只是一种方便的方法。您可能希望在手动比较大小时使用
isEmpty()
的一个原因是前者使代码实际检查的内容更加清晰。

首先对
Map
对象执行空检查,然后执行
Empty
检查以避免
NullPointerException

if(map != null && !map.isEmpty())

首先对
Map
对象执行空检查,然后执行
Empty
检查以避免
NullPointerException

if(map != null && !map.isEmpty())
map.size()

如果你仔细看

public boolean isEmpty() {
    return size == 0;
}
它只返回size==0

选择
.isEmpty()
而不是
.size()
的其他原因可以是:

  • 它更具表现力(代码更易于阅读和维护)
  • 仅供参考,
    map.size()

    String str = "abcd";
    Map<Integer,String> map = new HashMap<>();
    String[] strings = str.split("");
    for(String s: strings) {
         map.put(map.size(), s);
     }
    
    String str=“abcd”;
    Map Map=newhashmap();
    String[]strings=str.split(“”);
    用于(字符串s:字符串){
    map.put(map.size(),s);
    }
    
    Reference

    map.size()
    是O(1),而
    map.isEmpty()
    的复杂度也是相同的,所以从复杂度和执行角度来看,它们基本上没有区别

    如果你仔细看

    public boolean isEmpty() {
        return size == 0;
    }
    
    它只返回size==0

    选择
    .isEmpty()
    而不是
    .size()
    的其他原因可以是:

  • 它更具表现力(代码更易于阅读和维护)
  • 仅供参考,
    map.size()

    String str = "abcd";
    Map<Integer,String> map = new HashMap<>();
    String[] strings = str.split("");
    for(String s: strings) {
         map.put(map.size(), s);
     }
    
    String str=“abcd”;
    Map Map=newhashmap();
    String[]strings=str.split(“”);
    用于(字符串s:字符串){
    map.put(map.size(),s);
    }
    

    参考

    它们是一样的(实际上,它们是对立的)。但可能两者都无法阻止空指针异常。在这种情况下,如何使空指针异常为空?好吧,假设发生空指针异常是因为
    Map
    为空,您应该检查
    Map
    是否为空。但是,可能是因为其他原因发生了异常——不看代码就无法判断。它们是相同的(事实上,它们是对立的)。但可能两者都无法阻止空指针异常。在这种情况下,如何使空指针异常为空?好吧,假设发生空指针异常是因为
    Map
    为空,您应该检查
    Map
    是否为空。但这种异常可能是由于其他原因发生的——不看代码就无法判断。+1,但
    isEmpty()
    不一定只是一种方便的方法:它由
    java.util.Map
    指定,并且在该接口的至少一个实现中(即)它比
    size()快得多
    @ruakh好东西,我不知道这一点。如果hashmap中没有键值对,size()是否有可能返回非零值?@RadhickaPardessi大小应该永远不会变为负值。@ruakh我希望
    LinkedList
    会出现这种情况,但令人惊讶的是,事实并非如此。它只是继承了.1,但
    isEmpty()
    不一定只是一个方便的方法:它是由
    java.util.Map
    指定的,并且在该接口的至少一个实现中(即)它比
    size()
    @ruakh好东西要快得多,我不知道这一点。如果hashmap中没有键值对,size()是否有可能返回非零值?@RadhickaPardessi大小应该永远不会变为负值。@ruakh我以为
    LinkedList
    会是这种情况,但令人惊讶的是,事实并非如此。它只是继承了。再次检查答案,我错过了。两者实际上是相同的。我想到了一般收集:/好的,只是没有任何数量级的速度。再次检查答案,我错过了。两者实际上是相同的。我想到了一般的收集:/Ok,只是没有任何数量级的速度。在使用上述if条件后,我摆脱了NullPointerException。在使用上面的if条件后,我去掉了NullPointerException。THNAK用于输入。