首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文读懂《Effective Java》第43条:返回零长度的数组或集合,而不是null

对于一个返回null 而不是零长度数组或者集合的方法,客户端几乎每次用到该方法都可能会忘记写专门处理null 返回值的代码,进而导致NPE。...返回值为null 与性能 有时候会有程序员认为:null 返回值比零长度数组更好,因为它避免了分配数组所需要的开销,但这种观点站不住脚。...在返回值这种级别上担心性能问题是不明智的,除非分析表明这个方法是造成性能问题的真正源头 对于不返回任何元素的调用,每次返回同一个零长度数组是有可能的,因为零长度数组不可变的,而不可变对象可能被自由的共享...,没理由返回null,二是返回一个零长度的数组或者集合。...Java 的返回值为null 的做法,很可能是从C 语言沿袭过来的,在C 中,数组长度是与实际的数组分开返回的,如果返回的数组长度为0,再分配一个数组就没有任何好处了。

1.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL 数据库使用SQL SELECT语句来查询数据

    你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据 你可以使用 WHERE 语句来包含任何条件。 你可以使用 LIMIT 属性来设定返回的记录数。...---- 通过命令提示符获取数据 以下实例我们将通过 SQL SELECT 命令来获取 MySQL 数据表 runoob_tbl 的数据: 实例 以下实例将返回数据表 runoob_tbl 的所有记录:...mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。...在上面的例子中,PHP mysqli_fetch_array() 函数第二个参数为 MYSQLI_ASSOC, 设置该参数查询结果返回关联数组,你可以使用字段名称来作为数组的索引。...PHP 提供了另外一个函数 mysqli_fetch_assoc(), 该函数从结果集中取得一行作为关联数组。 返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false

    2.7K20

    PHP 常用函数大全

    ,并返回当前元素的值 end 将数组内部指针指向最后一个元素,并返回该元素的值(如果成功) reset 把数组内部指针指向第一个元素,并返回该元素的值 list 用数组中的元素为一组变量赋值 array_shift...从结果集中取得一行作为关联数组,或数字数组,或二者兼有 mysql_fetch_assoc 从结果集中取得一行作为关联数组 mysql_fetch_field 从结果集中取得列信息并作为对象返回 mysql_fetch_lengths...取得结果集中每个输出的长度 mysql_fetch_object 从结果集中取得一行作为对象 mysql_fetch_object 从结果集中取得一行作为枚举数组 mysql_field_flags...建立一个具有唯一文件名的文件 tmpfile 建立一个临时文件 touch 设定文件的访问和修改时间 umask 改变当前的 umask unlink 删除文件 GD and Image 函数...imagestring 水平地画一行字符串 imagestringup 垂直地画一行字符串 imagesx 取得图像宽度 imagesy 取得图像高度 imagetruecolortopalette

    3.7K21

    正则表达式 - 边界

    就像 ^ 和 $ 一样,\b 是个零宽度断言,表面上它会匹配空格或者是行起始,而实际上它匹配的是个零宽度的不存在的东西。这个理解起来不是很容易,但可以通过观察它匹配和不匹配的内容来理解。.../2 的原因是,MySQL 8.0.17之前有bug,结果返回的是UTF-16字符集,而不是原字符串的字符集,导致 length 函数的返回值会翻倍。...\Z 会匹配一行(主题词)尾部的MARINERE或Marinere,之后是任何可选字符。在本例中可选字符就是标点符号或者字母S。点号两边的括号不是必需的。...可以利用 \A 的特性轻松实现。如前所述,无论是否使用多行模式,替换结果都一样。(\\A.*) 捕获分组获取第一行,$1 在第一行首尾加标签。...1 row in set (0.00 sec)         也可以将正则表达式改为 ^(.*)$ 匹配整行,然后只替换多行模式的第一行,能达到相同的效果。

    2.5K10

    Redis协议规范(译文)

    RESP 错误信息 RESP具有错误的特定数据类型。 实际上错误与RESP 单行字符串完全相同,但第一个字符是减号' - '字符而不是加号。...这只是Redis使用的约定,不是RESP错误格式的一部分。 例如,ERR是一般错误,而WRONGTYPE是一个更具体的错误,意味着客户端尝试对错误的数据类型执行操作。...例如,三个整数的数组编码如下: "*3\r\n:1\r\n:2\r\n:3\r\n" 数组可以包含混合类型,元素不必具有相同的类型。...例如,当BLPOP命令超时时,它返回一个计数为-1的Null数组,如下例所示: "*-1\r\n" 当Redis使用Null数组回复时,客户端库API应返回空对象而不是空数组。...客户端库应返回如下内容: ["foo",nil,"bar"] 注意,这不是前面部分中所述的例外,而只是进一步指定协议的示例。

    1K30

    python入门:进来吧,给自己10分钟,这篇文章带你直接学会python

    裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程 Python具有列表(list)、元组(tuple)和字典(dictionaries)三种基本的数据结构,而集合(sets)则包含在集合库中...列表的特点跟一维数组类似(当然你也可以创建类似多维数组的“列表的列表”),字典则是具有关联关系的数组(通常也叫做哈希表),而元组则是不可变的一维数组(Python中“数组”可以包含任何类型的元素,这样你就可以使用混合元素...而多行字符串可以通过三个连续的单引号(”’)或是双引号(“””)来进行标示。Python可以通过u”This is a unicode string”这样的语法使用Unicode字符串。...这是因为只传递了该变量的内存地址,并且只有丢弃了旧的对象后,变量才能绑定一个对象,所以不可变类型是被替换而不是改变(译者注:虽然Python传递的参数形式本质上是引用传递,但是会产生值传递的效果)。...类 Python支持有限的多继承形式。私有变量和方法可以通过添加至少两个前导下划线和最多尾随一个下划线的形式进行声明(如“__spam”,这只是惯例,而不是Python的强制要求)。

    91400

    【重学 MySQL】二十九、函数的理解

    在计算机科学中,特别是在编程语言中,函数通常被定义为一个具有特定名称的代码块,它执行一个特定的任务或计算,并可能接受一个或多个输入(称为参数或自变量),然后返回一个结果(称为返回值)。...例如,MySQL提供了NOW()函数来获取当前的日期和时间,而SQL Server则使用GETDATE()函数实现相同的功能。...单行函数 单行函数对表中的每一行数据分别进行操作,并返回每一行的一个值。它们不依赖于其他行的数据。...多行函数(聚合函数) 多行函数(聚合函数)对一组值执行计算并返回单个值。这些函数通常与GROUP BY语句一起使用,对分组后的数据进行计算。...常见的多行函数包括: COUNT():返回行数或特定非NULL值的数量。 SUM():返回数值列中值的总和。 AVG():返回数值列中值的平均值。 MAX():返回列中的最大值。

    11910

    MySQL 查询专题

    NULL 与不匹配 在通过过滤选择出不具有特定值的行时,你可能希望返回具有 NULL 值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。...因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有 NULL 的行。 计算次序 WHERE 可包含任意数目的 AND 和 OR 操作符。允许两者结合以进行复杂和高级的过滤。...❑ 如果分组列中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。...这些问题不是理论问题,其答案取决于数据库的设置方式。 limit 关键字 行0 检索出来的第一行为行 0 而不是行 1。因此,LIMIT 1, 1 将检索出第二行而不是第一行。...例如,一个特殊词的搜索将会返回包含该词的所有行,而不区分包含单个匹配的行和包含多个匹配的行(按照可能是更好的匹配来排列它们)。类似,一个特殊词的搜索将不会找出不包含该词但包含其他相关词的行。

    5K30

    Redis协议规范(译文)

    RESP 错误信息 RESP具有错误的特定数据类型。 实际上错误与RESP 单行字符串完全相同,但第一个字符是减号’ - ‘字符而不是加号。...例如,Ruby库应返回’nil’,而C库应返回NULL(或在reply对象中设置特殊标志),依此类推。 RESP 数组 客户端使用RESP 数组将命令发送到Redis服务器。...例如,三个整数的数组编码如下: "*3\r\n:1\r\n:2\r\n:3\r\n" 数组可以包含混合类型,元素不必具有相同的类型。...例如,当BLPOP命令超时时,它返回一个计数为-1的Null数组,如下例所示: "*-1\r\n" 当Redis使用Null数组回复时,客户端库API应返回空对象而不是空数组。...客户端库应返回如下内容: ["foo",nil,"bar"] 注意,这不是前面部分中所述的例外,而只是进一步指定协议的示例。

    1.1K30

    30s到0.8s,记录一次接口优化成功案例!

    SQL优化 我的思路是将200万行转为一行返回。...要将 PostgreSQL 中查询出的 programhandleidlist 字段(假设这是一个数组类型)的所有元素拼接为一行,您可以使用数组聚合函数 array_agg 结合 unnest 函数。...这样做可以先将数组展开为多行,然后将这些行再次聚合为一个单一的数组。如果您希望最终结果是一个字符串,而不是数组,您还可以使用 string_agg 函数。...string_agg(elem) 将这些行聚合成一个以逗号分隔的字符串。 这将返回一个包含所有元素的单一数组。 查询结果由多行,拼接为了一行 再测试,现在是正常速度了,但是查询时间依旧很高。...这个查询将返回两列:一列是元素(elem),另一列是该元素在所有数组中出现的次数(count)。

    19721

    MySQL(六)常用语法和数据类型

    create [or replace] view viewname as select ...; 8、delete:从表中删除一行或多行 delete from tablename [where ......[order by ...] 15、start transaction:一个新的事务处理块的开始 start transaction; 16、update:更新表中的一行或多行 uptable tablename...,分别是定长串和变长串 定长串:接受长度固定的字符串,其长度实在创建表时指定的;定长列不允许多余指定的字符数目,它们分配的存储空间与指定的一样多(比如char) 变长串:存储可变长度的文本,有些变长数据类型具有最大定长...,有些是完全变长的,不论哪种,指定的数据得到保存即可(灵活) PS:MySQL处理定长列比变长列快速的很多,且MySQL不许云对变长列(或一个列的可变部分)进行索引 串数据类型表: ?...; 2、数值数据类型 数值数据类型存储数值,MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围; 数值数据类型表: ?

    48520

    SQL从入门到入魔之select简单查询

    未排序数据 如果没有明确排序查询结果,可能会发现显示输出的数据顺序与原表不同,返回的数据的顺序没有特殊意义,可能是数据被添加到表中的顺序,也可能不是,只要返回相同数目的行就是正常的。...SQL语句可以在一行上给出,也可以分成许多行,多数SQL开发人员认为将SQL语句分成多行更容易阅读和调试。...带一个值的LIMIT总是从第一行开始,给出的数为总的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。 行0开始 检索出来的第一行为行0而不是行1。...因此,LIMIT 1, 1将检索出第二行而不是第一行。...行数不够时 LIMIT中指定要检索的行数为检索的最大行数,如果没有足够的行(例如,给出LIMIT 10, 5,但只有13行),MySQL将只返回它能返回的那么多行。 以上 That's all.

    1.7K70

    SQLite 判断 JSON 数组是否包含某元素

    ,在 MySQL 中有 JSON_CONTAINS 可以使用,比如下面的 SQL: SELECT * from my_table WHERE JSON_CONTAINS(tags, '"love"')...2.json_each() 如果要在 SQLite 中判断一个JSON 数组中是否包含某个值,可以使用 SQLite 的 JSON1 扩展库。...所谓的表值函数,指函数结果是由多行构成的一个虚拟表,而非单一的值。 json_each() 函数遍历指定 JSON 文档,为每个直接子元素生成一行,最终返回由所有的行组成的结果集。...json_each() 函数返回一个具有以下列的结果集: key 如果 JSON 为数组,则 key 列为数组的索引;如果 JSON 为对象,则 key 列为对象的成员名称;其他情况, key 列为 NULL...回到最初的问题,可以借助 json_each() 查询 JSON 数组包含指定元素的记录。

    74530

    java的注释和分隔符

    单行注释 -// 多行注释 -/**/ 文档注释 -javadoc  2 分隔符:  Java语言里的分号(;)、花括号({})、方括号([])、圆括号(())、空格、圆点(.)都具有特殊的分隔作用,     ...因此被统称为分隔符        分号:Java语言里对语句的分隔不是使用回车来完成的,java语言采用分号(;)作为语句的分隔,     因此每个java语句必须使用分号作为结尾。 ...注意:java语句可以跨越多行书写,但字符串和变量名不能跨越多行。 ...虽然java语法允许一行书写多个语句但从程序可读性角度来看,         应该避免在一行书写多个语句          花括号:花括号的作用就是定义一个代码块,一个代码块指的就是”{”和”}”所包含的一段代码...方括号:方括号的主要作用是用于访问数组元素,方括号通常紧跟数组变量名,  而方括号里指定希望访问的数组元素的索引        圆括号:圆括号是一个功能非常丰富的分隔符:定义方法时必须使用圆括号来包含所有的形参声明

    1.8K30

    MySQL EXPLAIN执行计划详解

    MySQL会在查询上设置一个标记。当执行查询时,这个标记会使其返回关于在执行计划中每一步的信息,而不是真正完全的执行该语句。 它会返回一行或多行信息,显示出执行计划中的每一部分和执行的次序。...在查询中,每个表的输出只有一行,若多表关联,则输出多行。别名表单算为一个表,因此如果把表和自己连接,输出中也会有两行。这里的表的定义非常的广:可以是一个子查询,一个 UNION 结果。...index:跟全表扫描一样,只是MySQL扫描表时按照索引次序进行而不是行,主要优点是避免了排序;缺点是要承担按索引次序读取整个表的开销。这通常意味着如实按照随机次序访问行,开销较大。...常见的重要值如下: Using index:表示MySQL将使用覆盖索引,这发生在对表的请求列都是同一索引的部分的时候,返回的列数据只使用了索引中的信息,而没有再去访问表中的行记录。是性能高的表现。...Using filesort:MySQL会对结果使用一个外部索引排序,而不是按索引次序从表里读取行,即filesort(文件排序)。

    1.7K140
    领券