【代码优化】返回0长度数组或者集合

改掉你从C语言继承过来的习惯,我们在java中没理由返回类型为数组或者集合返回null。

private final List<Cheese> InStock =...;

public Cheese[] getCheeses() {

       if( InStock.size() ==0){

            return null;

       }

}

这种是我们经常使用的 返回的模式,这就带来在应用Cheese数组的时候 都需要判断数组是否为null。

Cheese[]  cheeses= shop.getCheeses();

if(cheeses! =null){

   ....

}

如果我们修改下,把数组为空或集合没有数据时候,返回一个0长度,这样就不会要在使用的时候判断

数组和集合是否为空了。

有人认为;null返回值比0长度数组更好,因为它避免了分配数组需要的开销。

这个观点是站不住脚的,原因有两点。第一,在这个级别上的担心性能问题是不可取的,因为这个级别的性能消耗

是微不足道的; 第二,对于不返回任何元素对象有可能被自由的共享。

总之,返回类型为数组或者集合的方法 没理由返回null,我们使用返回0长度的数组或集合。

【代码优化】返回0长度数组或者集合

时间: 2024-08-08 18:25:16

【代码优化】返回0长度数组或者集合的相关文章

0长度数组的使用

0长度的数组在ISO C和C++的规格说明书中是不允许的,但是GCC的C99支持的这种用法.GCC对0长度数组的文档参考:“Arrays of Length Zero” 如下代码片段,哪个更简洁更灵活,看一眼就知道了: #include <stdlib.h> #include <string.h> typedef struct tagArray { int length; char contents[]; //这个成员必须是结构体的最后一个成员. }ARRAY_S; typedef

C语言0长度数组(柔性数组)

0长度数组,又称为柔性数组(flexible array),通常用来实现变长数组,常见于TLV(type-length-value)的数据结构中.在标准 C 和 C++ 中,不允许用 0 长度数组,但在 GNU C 中,却可以定义 0 长度数组.通常会拿手册中给的例子来说明 struct line { int length; char contents[0]; } 从打印出来的结构体尺寸 sizeof (struct line) = 4 (和编译器有关,看内存对齐规则),可以看到contents

Effective Java 之-----返回零长度的数组或集合而不是null

如下代码,通常用户列表为空时,会习惯性返回null,因为这时会认为:null返回值比零长度数组更好,因为它避免了分配数组所需要的开销. private final List<UserBean> UserList = null; public List<UserBean> getUserBean(){ if(UserList.size() == 0){ return null; }else{ return UserList; } } 但这种观点是站不住脚的,原因如下: 1) 在这个级

结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

结构体中最后一个成员为[0]长度数组的用法:这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势:(1).不需要初始化,数组名直接就是所在的偏移:(2).不占任何空间,指针需要占用int长度空间,空数组不占任何空间.“这个数组不占用任何内存”,意味着这样的结构节省空间:“该数组的内存地址就和它后面的元素地址相同”,意味着无需初始化,数组名就是后面元素的地址,直接就能当指针使用. 这样的写法最适合制作动态buffer,因为可以这样分配空间malloc(sizeof(struc

返回零长度的数组或者集合,而不是null——Effective Java 读书笔记

/** * 返回零长度的数组或者集合,而不是null * * @author 刘向峰 * */ public class Shop { private List<Object> objectList; // 零长度数组常量被传递给toArray方法,以指明所期望的返回类型 private final static Object[] EMPTY_OBJECT_ARRAY = new Object[0]; public Shop(List<Object> objectList) { s

返回零长度的数组或者集合,而不是null

<<Effective Java>> 第四十三条:返回零长度的数组或者集合,而不是null 如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面, 我们也应该放回一个零长度的数组或者集合,而不是返回null.如果返回了null,客户端程序员就要检测返回的是不是null,然后才能 进行下一步操作,否则就会引发NullPointException.但是如果是返回的的是空数组或者集合,就不会再后续的使用这个对象上,引发 空指针

struct中长度为0的数组用途与原理

前言 在标准C和C++中,长度为0的数组是被禁止使用的.不过在GNUC中,存在一个非常奇怪的用法,那就是长度为0的数组,比如Array[0]; 很多人可能觉得不可思议,长度为0的数组是没有什么意义的,不过在这儿,它表示的完全是另外的一层意思, 这个特性是不可移植的, 所以,如果你致力于编写可移植,或者是稍稍需要跨平台的代码,这些Trick最好还是收起来的好. 本系列文章均系笔者所写,难免有一些错误或者纰漏,如果小伙伴们有好的建议或者更好的算法,请不吝赐教. 正文 在GNU的指南中,它是如此写道:

mybatis数组和集合的长度判断及插入

1.在使用foreach的是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况: 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list . 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array 如果dao层指定了param的name,或者dao层传的是map,collection里为param的name或map的key 2.判断长度 集合:<if test="

(转)C语言中长度为0的数组

前面在看Xen的源码时,遇到了一段代码,如下所示: 注意上面最后一行的代码,这里定义了一个长度为的数组,这种用法可以吗?为什么可以使用长度为0 的数组?长度为的数组到底怎么使用?……这篇文章主要针对该问题进行简单的讲解.废话不多说了,现在就开始. 长度为的数组在标准c和c++中是不允许的,如果使用长度为的数组,编译时会产生错误,提示数组长度不能为.但在GNUc中,这种用法却是合法的.它的最典型的用法就是位于数组中的最后一项,如上面所示,这样做主要是为了方便内存缓冲区的管理.如果你将上面的长度为的