Java
文章平均质量分 61
披萨大叔
某程票贩子,主业做菜,副业代码,兼职铲屎官
展开
-
使用Builder模式构建可扩展的多个参数构造器
最近在读Joshua Bloch的《Effective Java》,这里做下笔记。一般我们在写类的构造器时,如果遇到大量参数,甚至以后可能会扩展更多参数时,要用哪种构造器呢?重叠构造器模式这也是楼主第一反应,提供一个只有必要参数的构造器,第二个构造器有一个可选参数,一次类推,最后一个构造器包含所有参数。如: public class NutritionFacts{ private i原创 2016-07-05 17:53:25 · 1488 阅读 · 0 评论 -
String、StringBuilder、StringBuffer的区别
首先我们要知道:1、String是final类,是字符串常量。意味着一个String对象不可继承,不可改变,所以如下代码:String str = "abc";str += "d";其实是重新创建一个String对象,执行代码后,改变引用。所以每当我们对String对象进行操作时,都是在重复创建大量新String对象,原来对象等待被GC收集,效率大大降低。值得一提的是这样的代码:原创 2016-03-14 15:02:39 · 585 阅读 · 0 评论 -
Java NIO之MappedByteBuffer,高效文件内存映射
MappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高。NIO最主要的就是实现了对异步操作的支持。其中一种通过把一个套接字通道(SocketChannel)注册到一个选择器(Selector)中,不时调用后者的选择(select)方法就能返回满足的选择键(SelectionKey),键中包含了SOCKET事件信息。这就是select模型。SocketChannel的读转载 2016-07-19 21:37:51 · 1046 阅读 · 0 评论 -
Java泛型解惑
初识泛型关于泛型的使用,我们平时使用最多的可能就是如下场景:List<String> list = new ArrayList<String>();<>就是泛型的标志。以前对泛型理解不深,以前认为,在上面这段代码中:List这个容器,可以插入不同类型的对象。泛型给我们编码提供了一种便利,我们只需要在用的时候决定插入对象的类型,可以是String,可以是Integer,全凭我们实际需要。没错,这是我原创 2016-08-27 15:06:47 · 1131 阅读 · 1 评论 -
位运算及其应用实例
位运算是C/C++中的基本运算之一,即便是这样,它对大多数程序员来说是一个比较陌生的运算——大多数程序员很少使用位运算。本篇先简要介绍基本的位运算操作符及其用法(何时使用),然后介绍位运算符的几个典型应用: (1) 三种不用临时变量交换两个整数的实例,并分析每个实例的优缺点 (2) 进制转换,通过位运算实现将十进制数按二进制和十六进制输出,并得出一个通用的,用于将十进制转载 2016-08-13 11:53:00 · 1016 阅读 · 0 评论 -
wait(), notify(),sleep()详解
首先说说sleep()和wait()的区别 1、wait()是Object方法,sleep()是Thread方法。 2、锁是Object对象内的机制,所以我们可以简单记忆为,sleep()不会改变锁行为,因此wait()会释放对象锁,sleep()不会。 3、wait()、notify()、notifyAll()只能用在同步控制块或同步控制方法里,即,他们要和synchronized原创 2016-07-08 11:23:04 · 502 阅读 · 0 评论 -
利用CAS算法实现通用线程安全状态机
转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51372052 如果您觉得这篇文章对您有帮助,请点下文章最下面的赞~在多线程环境下,如果某个类是有状态的,那我们在使用前,需要保证所有该类的实例对象状态一致,否则会出现意向不到的bug。下面是通用线程安全状态机的实现方法。public class ThreadSa原创 2016-07-05 15:49:55 · 1009 阅读 · 0 评论 -
Callable,Runnable的区别及用法
编写多线程程序一般有三种方法,Thread,Runnable,Callable.Runnable和Callable的区别是: (1)Callable规定的方法是call(),Runnable规定的方法是run()。其中Runnable可以提交给Thread来包装下,直接启动一个线程来执行,而Callable则一般都是提交给ExecuteService来执行。 (2)Callable的任务执转载 2016-05-19 09:26:48 · 22399 阅读 · 0 评论 -
Java中volatile关键字的含义
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。 synchronized 同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线转载 2016-05-19 10:00:10 · 426 阅读 · 0 评论 -
HashMap, HashTable, HashTree, LinkedHashMap区别分析
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺转载 2016-04-05 22:04:48 · 2977 阅读 · 0 评论 -
i++计算误区
public static void main(String[]args){ int j = 0; for(int i = 0; i < 100; i++){ j = j++; } System.out.println(j); }最后输出结果依然为 0因为Java用了中间缓存变量机制,所以j=j++可换成原创 2016-04-19 21:40:39 · 370 阅读 · 0 评论 -
Java继承、多态面试题
public class A { public int a = 0; public void fun(){ System.out.println("-----A-----"); }}public class B extends A{ public int a = 1; public void fun(){ System原创 2016-04-19 22:14:14 · 10370 阅读 · 6 评论 -
Java内部类的作用
说起内部类,大家一定不陌生,Handler嘛,天天用。但是问其究竟,真正能把内部类说个一二三吗?反正博主是脑子一阵空白,正好看到网上有人总结,我就不重复造轮子了。作用1.内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以。2.内部类拥有外围类的所有元素的访问权限。3.可以实现多重继承。4.可以避免修改接口而实现同一个类中两种同名方法的调用。转载 2016-08-24 16:21:31 · 509 阅读 · 0 评论 -
Java中用内存映射处理大文件可以显著提升速度
本文转自:http://blog.csdn.net/tobacco5648/article/details/7679105在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。import java.io.BufferedInputStr转载 2016-07-19 21:44:15 · 816 阅读 · 0 评论 -
合理使用ArrayMap代替HashMap
我们都知道当key是int的时候,用SparseArray代替HashMap是个更省内存的方案。如果key是String或者其他自定义类型呢,不要忘了还有ArrayMap。ArrayMap是一个 //如果容量不够 if (mSize >= mHashes.length) { final int n = mSize >= (BASE_SIZE*2) ?原创 2016-07-08 15:34:44 · 7893 阅读 · 1 评论 -
Math.floor,Math.ceil,Math.rint,Math.round用法详解
Math.floorfloor原意:地板。Math.floor函数是求一个浮点数的地板,就是求一个最接近它的整数,它的值小于或等于这个浮点数。看下面的例子:public class Test{ public static void main(String[] args) { System.out.println("Math.floor(-1.1): " + Math转载 2016-07-07 22:54:08 · 1107 阅读 · 0 评论 -
Java虚拟机内存分配策略
最近在看周志明写的《深入理解Java虚拟机:JVM高级特性与最佳实践》,读到关于内存分配的一些策略,这里做一下笔记。对象优先在Eden区分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发生一次Minor GC。Minor GC时,如果Eden区的对象无法放入Survivor空间,就只能通过分配担保机制提前转移到老年代,来给新对象腾出空间。 新生代原创 2016-06-18 19:30:14 · 456 阅读 · 0 评论 -
Java中只有值传递,没有引用传递
先来看一个作为程序员都熟悉的值传递的例子:... ...//定义了一个改变参数值的函数public static void changeValue(int x) {x = x *2;}... ...//调用该函数int num = 5;System.out.println(num);changeValue(num);System.out.println(num);... ...转载 2016-05-17 21:50:57 · 2220 阅读 · 0 评论 -
HashMap源码分析
注:本文转自博客园,传送门在此,感谢牛奶、不加糖 http://www.cnblogs.com/ITtangtang/p/3948406.html#a4一、HashMap概述HashMap基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。(除了不同步和允许使用 null 之外,HashMap 类与Hashtable大致相同)此类不保证映射的顺序,特别是它转载 2016-04-20 11:02:05 · 1269 阅读 · 0 评论 -
Java精度类型转换面试题
public class Test{ public static void main(String[] args){ int a = 5; System.out.println("values is :" + ((a < 5) ? 10.9 : 9)); }}A. 编译错误 B. 10.9 C. 9 D. 以上答案原创 2016-04-19 23:51:01 · 603 阅读 · 0 评论 -
ConcurrentHashMap 和 CopyOnWriteArrayList 提供线程安全性和已改进的可伸缩性
今天在看Universal-Image-Loader源码时,看到它的磁盘缓存机制用到了Collections.synchronizedMap来赋予HashMap有条件的线程安全。第一次看到这个方法,以为看到了新大陆,百度后发现这是个古老的API,而且还存在一定的问题,继续百度,又发现了真正的大陆,在这分享一下。 PS:学习就像翻身越岭,刚翻过一个山头,还没来得及高兴就发现,前方竟然还有无数个山头。转载 2016-04-01 16:30:07 · 417 阅读 · 0 评论