建议60:性能考虑,数组是首选 一.分析  数组在实际的系统开发中使用的越来越少,我们通常只有在阅读一些开源项目时才会看到它们的身影,在Java中它确实没有List.Set.Map这些集合使用起来方便,但是在基本类型处理方面,数组还是占优势的,而且集合的底层也是通过数组实现. 二.场景  比如对一个数据集求和的计算: //对数组求和 public static int sum(int[] datas){ int sum = 0; for(int i = 0; I < datas.length;…
这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java平台体系及应用场景 从1995年Sun Microsystems公司正式推出Java,到2006年时Sun公司将其开源,迄今为止已经有了20年的历史.Java本身已不仅仅只是一门面向对象的编程语言,而是由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的跨平台开发与部署的支持,实现“一次…
转载: Java 性能优化手册 - 提高 Java 代码性能的各种技巧 Java 6,7,8 中的 String.intern - 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String.intern 方法的,以及这个方法在 Java 7 以及 Java 8 中做了哪些调整. 字符串池 字符串池(有名字符串标准化)是通过使用唯一的共享 String 对象来使用相同的值不同的地址表示字符串的过程.你可以使用自己定义的 Map<String, String> (根据需要使用 weak…
开发中经常用到Arrays和Collections这两个工具类. 在数组和列表之间进行切换.非常方便.但是也会遇到一些问题. 看代码: import java.util.Arrays; import java.util.List; public class Client { public static void main(String[] args) { int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.p…
Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用的时候非常不方便.比如要对一个班级的学生信息进行统计,因为我们不知道班级会有多少个学生(随时可能有退学,入学,转学),所以需要一个足够大的数组来容纳所有的学生.可以通过对数组扩容解决该问题. 代码如下: //加长数组 public static <T> T[] expandCapacity(T[] datas, int newLen) { // 不能是是负值 newLen = newLen<0?0:newLen; /…
建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们都是在运行期解释执行的.为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示: 1.灵活.脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,也可以在运行期改变类型. 2.便捷.脚本语言是一种解释型语言,不需要编译成二进制代码,也不需要像Java一样生成字节…
上一个建议解释了为什么要使用forName,本建议就说说哪些地方不适合使用动态加载. 如果forName要加载一个类,那它必须是一个类------8中基本类型就排除在外.它们不是一个具体的类. 其次它必须具有可追溯的类路径...否则就会报ClassNotFoundException. 在Java中,数组是一个非常特殊的类,虽然它是一个类,单没有定义类路径. public class Client { public static void main(String[] args) throws Ex…
List接口的toArray方法可以把一个结合转化为数组,但是使用不方便,toArray()方法返回的是一个Object数组,所以需要自行转变. toArray(T[] a)虽然返回的是T类型的数组,但是还是需要传入一个T类型的数组,这也挺麻烦的.我们期望输入的是一个泛型化的list,这样就能转化为泛型数组了. 看代码: import java.util.Arrays; import java.util.List; public class Client<T> { public static…
泛型类型在编译期被擦除,我们在类初始化时将无法获得泛型的具体参数,比如这样的代码: class Foo<T>{ //private T t =new T();//报错Cannot instantiate the type T //private T[] tArray= new T[5];//报错Cannot create a generic array of T private List<T> list= new ArrayList<T>(); } 这段代码有什么问题?…
建议62:警惕数组的浅拷贝 一.分析  在日常工作中,我们会遇见很多数组的拷贝和复制的问题,但是在你使用系统提供的API进行编码的时候,无形中会留下浅拷贝的隐患. 二.场景  有这样一个例子,第一个箱子里面与赤橙黄绿青蓝紫7色气球,现在希望第二个箱子也放入7个气球,其中最后一个气球改为蓝色,也就是赤橙黄绿青蓝蓝七个气球. import org.apache.commons.lang3.builder.ToStringBuilder; public class Client{ public sta…