关闭

为什么Java中的HashMap<K, V>的get函数是get(Object key),而不是get(K key)?

帮别人的代码改bug,发现有一大堆bug是由get或者remove传递进去的参数类型不匹配而造成的。 比如: Map m = new HashMap(); m.put(new Short((short) 2), "2222"); System.out.println(m.get(2)); 上面的代码输出是null。 一般人很难发现传递进去的int和Short类型不匹配,而...
阅读(6380) 评论(4)

泛型编程的困境

原文:http://research.swtch.com/generic 常用的数据结构(vectors,queues,maps,trees,等等)似乎是评估一个新语言的一个热门话题。Go语言的FAQ中有一条就是关于Go中的泛型编程。对于泛型编程的通常有以下三种处理方式: 1.(C语言)放弃泛型。这样苦了程序员,但是这样没前增加太多复杂的东西到语言中。 2.(C++语言)编译期特化或...
阅读(8807) 评论(7)

测试Java的synchronize和ReentrantLock在单线程下的效率

ReentrantLock 在多线程情况下要远胜synchronize,这点没有疑问。 最近要写个程序,有个变量是有多数情况下是一个线程读写,有少数情况下是多个线程并发读写。所以要测试下ReentrantLock 在单线程下和synchronize的效率对比。 在测试的过程中发现一个有意思的现象。 测试代码见后面。 测试代码1结果: noLockTime: 0:00:00.004 no...
阅读(2742) 评论(0)

Java中的数据结构一览

Java的类库实在是很多,以至于很多人都不太了解,结果总是自己造轮子。 下面汇总了Java中的一些数据结构,加上一些实现的分析,同时备忘。 至于时间复杂度,个人觉得写出来的用处不大。如果明白它是怎么实现的,那自然就知道它的时间复杂度。 如果不理解它的实现,把时间复杂度背得再熟也没用。 接口: Collection 子接口: BlockingDe...
阅读(15894) 评论(0)

Java中的sun.misc.Unsafe包

chronicle项目:https://github.com/peter-lawrey/Java-Chronicle 这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据。 作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒。 在看chronicle的源代码,发现一个牛B的利用Unsafe来直接读写内存,从而提高...
阅读(19764) 评论(2)

从Java中String的subString函数说起

今天在用VisualVM查看进程的堆dump时,发现一些有意思的地方,见下图: 在“OQL控制台”页面中可以看到“过度分配的字符串”,“布尔值太多”。 从这里,可以看到一些有意思的地方。 有垃圾回收机制的语言通常有很多优化 1..String是不能改变的,所以subString通常是和原来的String使用的是同一份内存,不会有内存拷贝。 所以有可能会出现有一个小字符串占...
阅读(2288) 评论(0)

为什么逗号表达式返回最后一个表达式的结果?--从另一个角度看C++

auto v = func1(), func2(), func3(); 因为一个函数调用是要经过参数压栈,调用完了,还有退栈(栈清理)的过程。 而这个退栈的工作可以由调用者或者被调用者来进行,因此也分为两种不同的调用约定: __cdecl和_stdcall,当然这个扯远了。要是再扯远点,还有利用寄存器,省去压栈的fastcall和C++特有的thiscall。 正因为函数调用是一个不断地入...
阅读(1254) 评论(2)
    个人资料
    • 访问:1712160次
    • 积分:11722
    • 等级:
    • 排名:第1445名
    • 原创:129篇
    • 转载:29篇
    • 译文:2篇
    • 评论:350条
    博客专栏
    文章分类
    最新评论