首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Mybatis查询结果空时,为什么返回值NULL或空集合

开始前我们先看一个问题: 你是否曾经在学习 Mybatis 时候跟我有一样疑问,什么情况下返回 null,什么时候是空集合为什么会是这种结果?那么你觉得上述这种回答能说服你嘛?...看完这篇你就知道查询结果空时候为什么集合会是空集合而不是 NULL,而对象为什么会是 NULL 了。 PS:对过程不感兴趣可以直接跳到最后看结论。...那么我们看到 DefaultSqlSession#selectList() 方法,先说结论:返回值集合而不是 NULL。...所以不管是集合类型还是普通对象,Mybatis 都会先初始化一个 List 存储结果,然后返回值普通对象且查时候,selectOne 会判断然后直接返回 NULL 值。...而返回值集合对象且查空时,selectList 会把这个存储结果 List 对象直接返回,此时这个 List 就是个空集合

5K20

HashMap默认初始长度是多少?为什么?

在面试中,经常遇到集合相关问题,集合中必定逃不掉HashMap,那简单都懂,比如hashmap初始长度,大部分人都知道是16,那如果面试官问为什么呢?...这个时候看到这篇文章小伙伴就赚了,带你彻底了解懂hashmap默认初始长度为什么是16 1. 默认长度是多少?...HashMap默认初始长度是16,自动拓展和手动初始化时,长度必须是2幂,即2^n (每次扩容都是以2整数次幂扩容 2.为什么是16呢?...(Hash数据)&1001(Length-1)=0001 设HashMap长度是16,则 index=11100011010101(Hash数据)&1111(Length-1)=0101 5.分析 长度...9时,-000,结果出现概率非常大,出现其他结果概率很小 长度10时,出现-00-,结果概率很大,出现其他结果概率较小 长度16时,可能会出现各种结果出现,因为(Length-1=15)

32620

JDK1.8以后hashmap为什么在链表长度8时候变为红黑树

在JDK1.8以及以后版本中,hashmap底层结构,由原来单纯数组+链表,更改为链表长度8时,开始由链表转换为红黑树,为何大刀阔斧对hashmap采取这个改变呢,以及为何链表长度8才转变为红黑树呢...我们都知道,链表时间复杂度是O(n),红黑树时间复杂度O(logn),很显然,红黑树复杂度是优于链表,既然这么棒,那为什么hashmap为什么不直接就用红黑树呢,请看下图: 源码中注释写很清楚...那为什么选择8才会选择使用红黑树呢?看下图: 源码上说,为了配合使用分布良好hashCode,树节点很少使用。...为什么这么说呢,再看下图 在链表转变为红黑树方法中,有这样一个判断,数组长度小于MIN_TREEIFY_CAPACITY,就会扩容,而不是直接转变为红黑树,可不是什么链表长度8就变为红黑树,要仔细看代码...因为通常情况下,链表长度很难达到8,但是特殊情况下链表长度8,哈希表容量又很大,造成链表性能很差时候,只能采用红黑树提高性能,这是一种应对策略。

57510

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

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

1.6K20

Java长度0阻塞对列-TransferQueue详解

Java7中加入了JSR 166y规范对集合类和并发类库改进。其中一项是增加了接口TransferQueue和其实现类LinkedTransferQueue。...顾名思义,阻塞就是发生在元素从一个线程transfer到另一个线程过程中,它有效地实现了元素在线程之间传递(以建立Java内存模型中happens-before关系方式)。...TransferQueue还包括了其他一些方法:两个tryTransfer方法,一个是非阻塞,另一个带有timeout参数设置超时时间。...SynchronousQueue队列长度0,最初我认为这好像没多大用处,但后来我发现它是整个Java Collection Framework中最有用队列实现类之一,特别是对于两个线程之间传递元素这种用例...Java 5中SynchronousQueue使用两个队列(一个用于正在等待生产者、另一个用于正在等待消费者)和一个用来保护两个队列锁。

90931

矩阵归先找位置,再分别置

样例 给出一个矩阵 [ [1, 2], [0, 3] ] 返回 [ [0, 2], [0, 0] ] 先找位置,再分别置 一种显而易见方法是先找到位置,把这些位置记下来...记录位置时候可以用vector>来一组一组来记录,这样是最直观。我一开始程序也是这么写,没有什么问题。...后来发现,如果某一行或者某一列出现多个0的话,上面的方法没有避免重复,可能在前面的操作中都已经清过了,所以想到可以吧row和col分别用一个set来记录,顺便去重,然后分别遍历两个set,这样就可以保证不做重复事情...vector> &mat,int row) { mat[row]=vector(mat[row].size(),0); //整行直接置...&mat,int col) { for(int i=0;i<mat.size();i++) mat[i][col]=0; //这一列置

62610

Python|划分数组连续数字集合

问题描述 给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成集合。如果可以,请返回 True;否则,返回 False。...解决方案 这道题根据标准解答答案来说其实是一道很简单题,只需要通过贪心算法便可以解决。...这里我要介绍是另外一种更加容易理解方法: 首先我们先将我们列表进行排序,便于接下来判断 因为我们用到方法是删除,所以我们在一开始先通过一个while循环,只要该列表长度大于0该程序就一直进行。...然后我们一个一个遍历,从第一个数字开始,通过循环k-1次判断这个数后面的三个满足自己比前一个大于一,如果满足,就符合,就将其装入我们另一个结果列表。...,很容易导致此题超出很多网站时间复杂度,但是可以当作为一种思路来看,我们做题应该还是首先考虑时间复杂度 实习主编 | 王楠岚 责 编 | 李和龙

1.6K20

长度 3 不同回文子序列(计数)

题目 给你一个字符串 s ,返回 s 中 长度 3 不同回文子序列 个数。 即便存在多种方法来构建相同子序列,但相同子序列只计数一次。 回文 是正着读和反着读一样字符串。...子序列 是由原字符串删除其中部分字符(也可以不删除)且不改变剩余字符之间相对顺序形成一个新字符串。 例如,"ace" 是 "abcde" 一个子序列。...示例 1: 输入:s = "aabca" 输出:3 解释:长度 3 3 个回文子序列分别是: - "aba" ("aabca" 子序列) - "aaa" ("aabca" 子序列) - "aca..." ("aabca" 子序列) 示例 2: 输入:s = "adc" 输出:0 解释:"adc" 不存在长度 3 回文子序列。...示例 3: 输入:s = "bbcbaba" 输出:4 解释:长度 3 4 个回文子序列分别是: - "bbb" ("bbcbaba" 子序列) - "bcb" ("bbcbaba" 子序列)

89920

MySQL关于日期处理

前言: 前面文章我们介绍过日期和时间字段查询方法,最近遇到日期值问题。原来了解过和 sql_mode 参数设置有关,但还不是特别清楚,本篇文章将探究下MySQL怎么处理日期值问题。...1.问题描述 这里我们说日期值是指年、月、日,即'0000-00-00'。...显然,这是不合法日期值,但由于设计问题或历史遗留问题,有时候数据库中有类似日期值数据,默认情况下插入值日期会报错,可以通过修改参数sql_mode模式来避免该问题。...如果未启用此模式,则允许部分为日期插入,并且不会产生任何警告。 如果只启用此模式,则将该值日期插入'0000-00-00'并产生警告。...如果启用了此模式和严格模式,则除非IGNORE同时指定,否则不允许插入日期。对于INSERT IGNORE和 UPDATE IGNORE,将该值日期插入'0000-00-00'并产生警告。

4.3K40
领券