手记

JAVA优化(5)

1.让工具类不可实例化
私有构造函数

2.getClass()和instance of 区别
用getClass()判断一个类是不是属于该类,是严格的判断,不存在继承关系
instance of 如果该判断的类属于该类的子类,也认为是相当的。

3.replanceAll(),中第一个表达是正则

String str = "好是好";
String  str1 = "|是|";
System.out.println(str.replaceAll("好",""));
System.out.println(str1.replaceAll("|",""));

打印结果:是 |是|
所以对特殊字符进行替换要注意

4.String,StringBuffer,StringBuilder使用场景
1)String 使用场景
在字符串不经常变化的场景可以使用,例如常量的声明,少量的变量运算等
2)StringBuffer使用场景
在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,例如xml解析,HTTP参数解析和封装等。
3)StringBuilder类的场景
在频繁进行字符串运算(如拼接、替换、删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder例如SQL语句的拼装,JSON封装等。

5.中文排序(复杂的字不能)

String[] strs={"张三","李四","王五"};
Comparator c = Collator.getInstance(Locale.CHINA);
Arrays.sort(strs,c);
for (int i = 0; i <strs.length ; i++) {
   System.out.println(strs[i]);
}

打印:李四 王五 张三

6.谨防浅拷贝带来不必要的问题
1)map
直接赋值为浅拷贝

 HashMap  hm1 =new HashMap();
 hm1.put("name","张三");
 hm1.put("idNo","1454341541534");
 HashMap hm2 = hm1;
 hm2.put("name","zhang");
 hm2.put("idNo","4asdfasdf5");
 System.out.println("hm1  "+hm1.get("name")+"  "+hm1.get("idNo"));
 System.out.println("hm2  "+hm2.get("name")+"  "+hm2.get("idNo"));

打印结果如下:
hm1 zhang 4asdfasdf5
hm2 zhang 4asdfasdf5

利用putAll为深拷贝

HashMap  hm1 =new HashMap();
hm1.put("name","张三");
hm1.put("idNo","1454341541534");
HashMap hm3 = new HashMap();
hm3.putAll(hm1);
hm3.put("name","zhang");
hm3.put("idNo","4asdfasdf5");
System.out.println("hm1  "+hm1.get("name")+"  "+hm1.get("idNo"));
System.out.println("hm3  "+hm3.get("name")+"  "+hm3.get("idNo"));

打印结果如下:
hm1 张三 1454341541534
hm3 zhang 4asdfasdf5

0人推荐
随时随地看视频
慕课网APP