Posted on 2011/02/20, 4:00 pm, by zhangv, under
技术(Tech).
ArrayList用到底, 其他选择 LinkedList, set, treeset,stack 关键是你要解决什么问题
一直以来, 在没有什么特殊情况下, 只要是元素数量不确定, 必然会用ArrayList. 除了增加了变长的特性外, ArrayList本质上就是个数组.
因此在创建ArrayList时应对其中要存储的对象数量有个估计, 否则经常性的扩容操作和remove带来的下标移位操作会影响程序的性能.
如果需要经常性的删除, 可以考虑hashset. 当然hashset不支持随机访问, 只能通过遍历.所以要根据需求来决定.
Linked***和其他集合的区别基本就是底层实现用链表和数组的区别. 链表和数组的区别请自行翻阅课本.
HashMap不指定size
由于HashMap的实现也是基于数组进行散列, 所以同样存在扩容时的性能问题. 所以尽量要指定合理的大小和factor
鄙视(膜拜)数组
最原始意味着最好或最坏, 每个人的看法都不一样. 数组的局限在于它是定长且只能是一种类型(java中).(当然你可以声明Object数组然后放任何东西, 但相信我, 你很少需要这么做)
通过下标访问数组元素是最快的
如果是频繁的数据访问, 计算(比如位图处理). 建议还是用数组, 最简单最纯粹也最高效.
随意使用concurrent
当发现HashMap存在多线程修改的情况时, 会立刻Map m = Collections.synchronizedMap(new HashMap(…));
实际上很多时候应该在集合操作以外保证并发的情况, 当然这里再加上一道也更稳妥,但能不用就不用
小心集合类的垃圾回收陷阱
集合对象如果没有设置为null的时候, 其中所有的对象即便设置为null都是无法被回收的, 因为集合仍然有该对象的引用.
所以当使用集合对象时 要记得集合中对象的生命周期, 以免造成泄漏.
参考:
深入Java集合学习系列:ArrayList的实现原理-http://zhangshixi.javaeye.com/blog/674856
深入Java集合学习系列:LinkedHashMap的实现原理-http://zhangshixi.javaeye.com/blog/673789
深入Java集合学习系列:LinkedHashSet的实现原理-http://zhangshixi.javaeye.com/blog/673319
深入Java集合学习系列:HashSet的实现原理-http://zhangshixi.javaeye.com/blog/673143
深入Java集合学习系列:HashMap的实现原理-http://zhangshixi.javaeye.com/blog/672697
Posted on 2010/11/26, 2:19 am, by zhangv, under
技术(Tech).
直接上代码:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import org.json.me.JSONObject;
public class GooglUtils {
private static String GOOGL_API_ENDPOINT=”http://goo.gl/api/shorten?security_token=null&url=”;
public static String shorten(String url) throws Exception{
HttpConnection con = null;
InputStream in = null;
OutputStream out = null;
ByteArrayOutputStream bos = null;
OutputStreamWriter osw = null;
InputStreamReader isr = null;
byte[] request;
int messageLength;
try {
bos = new ByteArrayOutputStream();
osw = new OutputStreamWriter(bos, “UTF-8″);
// osw.write(url);
osw.flush();
request = bos.toByteArray();
messageLength [...]
Posted on 2010/01/31, 7:33 pm, by zhangv, under
技术(Tech).
jdepend使用起来还是比较容易的,但是report分析,以及背后的一些事情还是要弄明白的.否则report就真的成了只是report而没有任何实际价值.
使用jdepend的目的
分析包的依赖情况是否满足面向对象的依赖原则.其实面向对象,设计模式变出那么多花样最后无非就是要解决依赖的问题.但很多情况下,我们用了技巧却忘了为什么用,最后便的为了技巧而技巧,为了设计而设计,而忽略了最终目的.
也许这种感觉只有在深刻的体会过”混乱”之后才能理解吧.
如何分析jdepend的report
Abstractness – 抽象度,该包中抽象类所占的比例
Afferent coupling(Ca) – 被依赖度,有的翻译成传入耦合.我觉得传入耦合不是很清楚,很容易让人理解反了.指依赖该包的其他包的总数. 这个值越高说明他应该要么是公用包,要么是抽象(接口)包
Efferent coupling(Ce) – 依从度,有的翻译是传出耦合.指该包依赖于其他包的个数.通常越高表明依赖其他包越严重,如果这个包不是实现包,并不意味着ce就越大越好.依从度应该在一个合理的范围.同时依从的包应该是stable的.
Instability(I) – 不稳定性.公式 ce/(ce+ca).即依从度在所有依赖中的比例.还比较好理解,如果是完全抽象包(ca=N,ce=0),I=0,如果是完全具体实现包(ca=0,ce=N),I=1.
Distance – 指该包和理想情况的最大差距.这个有点绕.举个例子,如果一个包的A=1,也就是完全抽象的.那么他的I应该是=0的,但如果不是(也即是他还要依赖其他更抽象的包).那么distance=Instability-0(理想值).而如果一个包的A=0,即该包完全是实现,那么他的I应该是1,那么distance = 1(理想值)-Instability
而如果0<A<1,那么就不知道他的I的理想值是什么了.这个时候理想值应该是A,distance=|A+I-1|.
参考资料1
Posted on 2009/10/20, 3:46 pm, by zhangv, under
技术(Tech).
如果不小心还是会栽跟头,看到网上有的人只是roll(Calendar.Date,-1)就了事了。要么就是判断日,月写一大堆。其实最简单的应该是:
GregorianCalendar cal = new GregorianCalendar();if(cal.get(Calendar.MONTH)==0 && cal.get(Calendar.DAY_OF_YEAR)==1){ cal.roll(Calendar.YEAR, -1);}cal.roll(Calendar.DAY_OF_YEAR, -1);
不知道是不是最简单的
Posted on 2009/08/10, 12:10 pm, by zhangv, under
技术(Tech).
Effective Java – 2002年的Jolt大奖,详细讲解了57个平时 不大会深入了解而又非常重要的知识点。作者Joshua Bloch还有一本类似的书 – Java PuzzlersEffective Enterprise Java – Effective Java的姊妹篇,专注于企业级Java应用的各种蹊跷和最佳实践。Bitter Java – 从负面学习,在教训和犯错中成长。作者列举了大量的反模式来挑战我们那些被动接受的先入为主。高质量Java程序设计:2003年的一本书,作者是几个国内的程序员。模仿Effective Java的组织形式,通过35个条款,讲解了一些在实际工作中经常会忽视的问题。SCEA study guide – 考试用书,如果可能遇到面试=笔试的情况,当然还可以把其他的study guide都拿出来看看。各种specification,直接到JCP找相应的JSR:
JSE: New I/O ,Concurrency Utilities, Profiling Architecture,JAXP1.3,JavaTM SE 6 Release Contents,JavaTM Language Specification,JVM
JEE: EJB3.0,JSP2.1, JavaEE 1.5,Servlet 2.4 Specification,JDBCTM 4.0 ,Servlet 3.0,JavaMail, [...]
Posted on 2009/06/20, 11:56 pm, by zhangv, under
技术(Tech).
想要用facebook-java-api做一个简单的登录验证并获取用户信息,可是:
用facebook的login页面验证后,居然是自动跳转到app的中定义的callbackUrl(也就是app host的url)。这样就给本地调试带来很大的麻烦,难不成每次做了修改都要发布到host上然后再测试?
Posted on 2009/05/20, 12:32 pm, by zhangv, under
技术(Tech).
Keep getting the out of memory error when handling the image file in emulator(wtk) and device(e61i)
Just had a simple test and here is what I found:
The code is simple:
for(int i=1000;i<Integer.MAX_VALUE;i++){
System.out.println(i);
byte[] buf = new byte[i];
}
and see when your program will crash. – Actually it won’t crash, as the OOME(out of memory error), is an Error rather [...]
Posted on 2009/05/10, 1:42 pm, by zhangv, under
技术(Tech).
在java6中加入了对scripts的支持(jsr223),并且捆绑了一种javascript的实现(来自mozilla的rhino)。
但是今天在使用时候发现一个小问题,jdk-6u12和jdk-6u13里的Invocable居然是不兼容的!
在jdk-6u12中是
invokeFunction(String name, Object… args)
而jdk-6u13中是
invoke(String name, Object… args)
在网上发现大多数的写法都是前一种(invokeFunction),搞不清楚为什么会出现这样的问题。但如果这的出现开发环境和部署环境稍有不同岂不是搞的很不爽,明明只是一个很小的问题。却可能造成很奇怪的结果,还要改代码重新编译才行。
解决方法:
1.开发环境和部署环境的jdk版本统一。
2.干脆使用BSF或者BSH。
虽说两种方法和简单直接,但是总觉得因为这么一点点问题而动这么大的干戈真不应该。
http://code.google.com/appengine/docs/java/overview.html
Posted on 2009/04/11, 11:36 pm, by zhangv, under
技术(Tech).
pureMVC http://wiki.forum.nokia.com/index.php/Model-View-Controller_Architecture可以用于jme开发的MVC框架
nokia2008年的CallingAllInnovators比赛的获胜者,其中总冠军是来自中国的,居然一直都没听说过,Grand Prize: X Dancery,看了一下视频,震撼到了!http://www.callingallinnovators.com/previous_winners.aspx
eSWT貌似s60的runtime一直都支持eSWT,怎么没怎么见有人用过呢?可能还是见的太少了。http://wiki.forum.nokia.com/index.php/ESWTeRCP是nokia的开源项目http://www.eclipse.org/ercp * eSWT: The embedded Standard Widget Toolkit which is a subset of desktop SWT API. An eSWT implementation for Series 80 has been contributed. The development for s60 platform is in progress. * Core Runtime: Eclipse Core which provides OSGI and Extension Point Framework support. * eJFace: A set [...]