方法不预先调整集合的分配

Method does not presize the allocation of a collection

Sonar 向我显示了这个错误 Performance - Method does not presize the allocation of a collection

Method mapping(ResponseEntity) does not presize the allocation of a collection

代码如下:

private Set<ResponseDTO> mapping(ResponseEntity<String> responseEntity) {
    final Set<ResponseDTO> result = new HashSet<>();
    final JSONObject jsonObject = new JSONObject(responseEntity.getBody());
    final JSONArray jsonArray = jsonObject.optJSONArray("issues");
    for (int i = 0; i < jsonArray.length(); i++) {
        final JSONObject innerObject = jsonArray.getJSONObject(i);
        final String name = innerObject.optString("key");
        result.add(new ResponseDTO().name(name));
    }
    return result;
}

为什么 Sonar 将此标记为错误,我该如何解决?

好吧,您正在对一个已知长度的数组进行操作,并将所有元素添加到集合中。假设您没有任何重复结果集应该包含相同数量的元素。

但是,您正在创建一个具有默认初始容量的集合,即 new HashSet<>()。这可能会导致需要调整集合的大小,这本身不是问题,但没有必要,因此可能会导致一些性能下降。

要摆脱它,请在迭代之前通过 new HashSet<>(jsonArray.length()) 创建集合。