一、StringBuffer类
问题:在使用String进行字符串连接时,每一秒连接都会产生一个临时字符串对象,连接的越多,内存消耗越大,我们应该避免这种情况发生。
解决:使用StringBuffer来解决字符串连接的问题。
StringBuffer的源码分析:
(1)使用字符数组实现数据存储
(2)默认初始容量是16(数组的大小)
(3)在追加数据方法(append(。。。。))中实现容量的扩充
(4)扩充的算法:原来长度*2+2
(5)线程安全 在多线程时使用效率低:多线程同时访问同一个资源时,如果不做处理,那么这个资源就会不可预知的情况发生,这样我们把这种情况称为线程不安全。
在使用StringBuffer时,建议根据实际要存储的数据大小,来初始化容量,避免字符数组扩充次数,影响性能。
StringBuffer sb = new StringBuffer(100);
Capacity:容量
Offset:偏移量
StringBuilder类:
(1)功能与StringBuffer相同
(2)线程不安全,在单线程时建议使用,效率高
StringBuffer与StringBuilder的父类AbstractStringBuilder
面试题:StringBuffer与StringBuilder的区别
二、程序国际化
让程序适应不同的国家或地区的语言环境。
Locale类:本地化对象
ResourceBundle类:资源文件绑定的工具类
MessageFormat:消息格式化
JAVA实现国际化步骤:
(1)创建针对不同语言环境的资源文件,格式:名称前缀_语言_地区.properties(这种文件我们又称属性文件)
中文:info_zh_CN.properties
英文:info_en_US.properties
在文件中提供属性信息,格式:属性名称=值
(2)使用ResourceBundle工具类绑定资源文件。
(3)通过Locale本地化对象指定语言环境
(4)通过ResourceBundle对象获取资源文件中的属性值
(5)通过MessagerFormat对象格式化动态文本
三、二分查找法:
* 条件:必须要求数序是有序的。
* 求中间值的位置=(开始位置+结束位置 )/2
public class BinarySearchDemo {
public static void main(String[] args) {
//
int[] num = {10,20,50,100,200,300,600};
System.out.println(binarySearch(num,30));
}
private static int binarySearch(int[] num,int key){
int start = 0;//开始位置
int end = num.length-1;
int middle = -1;
while(start<=end){
middle = (start+end)/2;
if(num[middle]==key){
return middle;
}else if(num[middle]>key){
end = middle-1;
}else if(num[middle]<key){
start = middle+1;
}
}
return -1;
}
}
四、日期操作类
1、Date类的一个对象表示当前时间
此类,大多数方法都在JDK1.1被标记为已过时。
使用Date:
import java.util.Date; (java.sql.Date)
Date date = new Date();
2、日历 类Calendar
Calendar c = Calendar.getInstance();
String[] week =
{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
StringBuilder sb = new StringBuilder(34);
sb.append(c.get(Calendar.YEAR))
.append("年")
.append(c.get(Calendar.MONTH)+1)
.append("月")
.append(c.get(Calendar.DAY_OF_MONTH))
.append("日")
.append(" ")
.append(c.get(Calendar.HOUR_OF_DAY))
.append(":")
.append(c.get(Calendar.MINUTE))
.append(":")
.append(c.get(Calendar.SECOND))
.append(" ")
.append(c.get(Calendar.MILLISECOND))
.append(" ")
.append(week[c.get(Calendar.DAY_OF_WEEK)-1]);
System.out.println(sb);
//System.out.println(c.get(Calendar.DAY_OF_WEEK));
3、日期格式化
DateFormat df = new SimpleDateFormat(
"yyyy年MM月dd日 HH:mm:ss SSS E");
String now = df.format(new Date());
System.out.println(now);
4、对象比较器
自定义对象实现比较(排序),可以实现 Comparable接口
public int compareTo(Pig o) {
//此对象小于指定对象,返回负整数
//此对象等于指定对象,返回零
//此对象大于指定对象,返回正整
// if(this.weight<o.weight)return -1;
// if(this.weight>o.weight)return 1;
// return 0;
return this.weight-o.weight;
}
自定义对象数组通过 Arrays.sort()方法实现排序,必须实现Comparable接口
否则将报ClassCastException异常,原因是sort方法的内部实现使用了Comparable
接口来比较两个相邻的对象大小
把资源文件编码转换成unicode编码
Native2ascii -encoding gb2312 masg.properties masg_zh_CN.properties
把上面的命令用一个*.bat文件保存,在该目录上双击运行,即可生成msg_zh_CN.properties文件