如何在Java中判断集合是否为空
在Java开发过程中,判断集合是否为空是非常常见的操作,很多业务逻辑都需要基于集合的状态做后续处理。如果判断逻辑不准确,很容易引发空指针异常或者业务逻辑错误,因此掌握正确的集合非空判断方法非常重要。
判断集合为空的核心思路
判断集合是否为空,本质要区分两种情况:一种是集合对象本身为null,也就是没有初始化;另一种是集合对象已经初始化,但是内部没有存储任何元素。正确的判断流程应该先判断集合引用是否为null,再判断集合内部是否有元素,避免直接调用集合方法导致空指针异常。
不同集合类型的判断示例
List集合判断
List是最常见的集合类型之一,判断其是否为空需要先校验引用是否为null,再调用isEmpty()方法判断元素数量。以下是具体实现代码:
import java.util.ArrayList;
import java.util.List;
public class ListEmptyCheckDemo {
public static void main(String[] args) {
// 情况1:集合引用为null
List<String> nullList = null;
// 先判断引用是否为null,再判断是否包含元素
if (nullList == null || nullList.isEmpty()) {
System.out.println("nullList是空集合");
}
// 情况2:集合已初始化但无元素
List<String> emptyList = new ArrayList<>();
if (emptyList == null || emptyList.isEmpty()) {
System.out.println("emptyList是空集合");
}
// 情况3:集合有元素
List<String> hasElementList = new ArrayList<>();
hasElementList.add("测试元素");
if (hasElementList == null || hasElementList.isEmpty()) {
System.out.println("hasElementList是空集合");
} else {
System.out.println("hasElementList不是空集合,元素个数:" + hasElementList.size());
}
}
}Set集合判断
Set集合的判断逻辑和List完全一致,同样需要先判断引用是否为null,再调用isEmpty()方法。示例代码如下:
import java.util.HashSet;
import java.util.Set;
public class SetEmptyCheckDemo {
public static void main(String[] args) {
Set<Integer> nullSet = null;
Set<Integer> emptySet = new HashSet<>();
Set<Integer> hasElementSet = new HashSet<>();
hasElementSet.add(100);
// 通用判断方法
checkSet(nullSet);
checkSet(emptySet);
checkSet(hasElementSet);
}
private static void checkSet(Set<Integer> set) {
if (set == null || set.isEmpty()) {
System.out.println("当前Set是空集合");
} else {
System.out.println("当前Set不是空集合,元素个数:" + set.size());
}
}
}Map集合判断
Map虽然不是Collection的直接子接口,但判断空的逻辑类似,同样需要先判断引用是否为null,再调用isEmpty()方法校验是否有键值对。示例代码如下:
import java.util.HashMap;
import java.util.Map;
public class MapEmptyCheckDemo {
public static void main(String[] args) {
Map<String, String> nullMap = null;
Map<String, String> emptyMap = new HashMap<>();
Map<String, String> hasElementMap = new HashMap<>();
hasElementMap.put("key1", "value1");
checkMap(nullMap);
checkMap(emptyMap);
checkMap(hasElementMap);
}
private static void checkMap(Map<String, String> map) {
if (map == null || map.isEmpty()) {
System.out.println("当前Map是空Map");
} else {
System.out.println("当前Map不是空Map,键值对数量:" + map.size());
}
}
}常见错误判断方式
很多开发者容易写出错误的判断逻辑,以下是几种典型的错误情况:
- 直接调用isEmpty()方法:如果集合引用为null,调用isEmpty()会直接抛出空指针异常,比如
nullList.isEmpty()就会报错。 - 只判断引用是否为null:如果集合已经初始化但是内部没有元素,会被误判为非空,导致业务逻辑错误。
- 用size() == 0判断代替isEmpty():虽然size() == 0也能达到效果,但是isEmpty()方法的语义更清晰,而且部分集合实现中isEmpty()的性能可能更好,更推荐使用isEmpty()。
工具类简化判断
如果项目中频繁需要判断集合是否为空,可以封装一个通用的工具类,避免重复编写判断逻辑。以下是一个简单的集合工具类示例:
import java.util.Collection;
import java.util.Map;
public class CollectionUtil {
/**
* 判断集合是否为空(引用为null或者无元素都算空)
* @param collection 待判断的集合
* @return 为空返回true,否则返回false
*/
public static boolean isEmpty(Collection<?> collection) {
return collection == null || collection.isEmpty();
}
/**
* 判断集合是否不为空
* @param collection 待判断的集合
* @return 不为空返回true,否则返回false
*/
public static boolean isNotEmpty(Collection<?> collection) {
return !isEmpty(collection);
}
/**
* 判断Map是否为空(引用为null或者无键值对都算空)
* @param map 待判断的Map
* @return 为空返回true,否则返回false
*/
public static boolean isEmpty(Map<?, ?> map) {
return map == null || map.isEmpty();
}
/**
* 判断Map是否不为空
* @param map 待判断的Map
* @return 不为空返回true,否则返回false
*/
public static boolean isNotEmpty(Map<?, ?> map) {
return !isEmpty(map);
}
}封装工具类之后,判断集合是否为空就可以直接调用方法,比如CollectionUtil.isEmpty(list),代码更简洁,也减少了出错的概率。
JavaCollectionisEmpty空指针异常集合判断修改时间:2026-05-24 13:58:02