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用于输入。