3月16号

一、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文件

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值