Java源码解读
Java源码解读
何怀逸
这个作者很懒,什么都没留下…
展开
-
Java 中利用Lambda表达式实现《行为参数化》
一、什么是行为参数化?一堆苹果使用List表示,那么从这一堆苹果中找出其中的绿色苹果,那还不简单吗?苹果类:找出绿色苹果的逻辑: 逻辑相当的简单,就是将List中的苹果的appleColor取出来和绿色做对比就行了。但是,经过一夜的时间后,农场主说有新的需求了,就是找出苹果中重量大于150g的苹果。当然这也很简单,只需要将上面的代码复制一下,然后更改一下对比的那一行代码即可:是不是也很简单。突然农场主说,能不能找出重量大于150g的绿苹果,你很不情愿的再去复制一边代码,将筛选的条件...原创 2022-06-05 18:40:42 · 315 阅读 · 0 评论 -
为什么说单线程情况下使用线程安全类性能慢?
这里简单举一个例子,比如说:使用ArrayList和vector这两个集合,前者是线程不安全,后者是线程安全,在性能上面,线程不安全的ArrayList肯定比线程安全的Vector性能要好一点。我们时常就说ArrayList的效率高,突然想问为什么?我的猜测就是因为线程安全的类,例如:Vector底层使用了锁在保证线程的安全,而锁的使用是需要额外的开销的,但是在单线程环境下,这种额外的开销就显得画蛇添足了,因此是线程安全类的锁机制导致了其性能较低。我去看了Vector的底层源码,发现还真的是这样原创 2022-03-29 22:59:42 · 327 阅读 · 0 评论 -
Java的左移、右移和无符号右移
概念:首先解释一下左移右移,举例一个二进制数1000(十进制为8),此时的小数点在最右边,也就是:1000.左移或者右移就是小数点不动,将数字整体左移或者右移,此时应该注意:(1)如果是左移,低位(也就是靠近小数点的位)需要补0,左移几就补多少个0。例如: 1000左移一位,写法是为 8 << 1, 那么二进制数就变为了10000,此时十进制值为16(2)右移时,如果是正数,则高位补0,如果是复数,则高位补1.另外,>>>表示无符号右移,不管是正数还是负数,.原创 2022-03-07 17:37:50 · 2350 阅读 · 0 评论 -
Java中的^符号
概念:^是异或运算符,符号两边的数必须为二进制。计算方式:符号左右两边的二进制数,相应的位相同为0,不相同为1。举例:十进制 8, 转换二进制为 1000十进制10,转换二进制为1010那么,1000^1010 = 0010另外, boolean类型也是一样的,当两个boolean类型的变量同真或同假时,结果为假;两个变量一真一假时,结果为真。public class Xor { public static void main(String[] args) {原创 2022-03-07 16:09:26 · 28847 阅读 · 1 评论 -
HashMap的put方法返回值
今天发现一个比较有趣的事情,put方法的原理,但是没有关注方法的返回值是什么,今天测试了一下,put方法的返回值是当前put时的key的调用get方法取到的值。 Map<String, String> map = new HashMap(); String lastFirst = map.put("key","value"); //再第二次put时,先获取当前key的值 String getKey = map.get("key"原创 2022-03-07 15:17:54 · 814 阅读 · 1 评论