标签:ch 符号 开始 System char 获取 因为 sb append
append() > +=
在字符串的拼接操作中,StringBuilder下的append()方法的效率是远远高于“+=”号的,而今晚遇到的一道练习题,让我“快乐”了那么一下下下下下下下…………………………………………………………
题目叫做:-----生成随机四位验证码-----
要包含大小写字母和数字,我先用自己的方法做了一遍,然后又用标准答案的方法做了一边,然后我测试两种方法所花费的时间,居然惊人的发现,我的方法比标准答案的方法快出15毫秒,给我整的老激动了,结果发现标准答案里用了一个“+=”符号来拼接,而我用的是append()方法拼接的,害的我白激动一场,还以为我发现了新大陆呢。
下面上代码:
我的答案:
public static void main(String[] args) {
long t1 = System.currentTimeMillis(); //获取开始时间
//调用方法
System.out.println(getRandomCode());
long t2 = System.currentTimeMillis(); //获取结束时间
System.out.println(t2 - t1); //计算间隔时间(0-3毫秒之间)
}
private static String getRandomCode() {
//创建Random对象
Random r = new Random();
//创建用于返回的sb值
StringBuilder sb = new StringBuilder();
//四次循环
for (int i = 0; i < 4; i++) {
//获取随机大写字母
char bigWord = (char) (r.nextInt(26) + 65);
//获取随机小写字母
char smallWord = (char) (r.nextInt(26) + 97);
//获取随机数字
char number = (char) (r.nextInt(10) + 48);
//将三者存入一个字符数组中
char[] ch = {bigWord, smallWord, number};
//随机获取字符数组的索引值
int num = r.nextInt(ch.length);
//将获取的字符数组值存入sb中
sb.append(ch[num]); //就是这里,我用的append拼接
}
//返回sb值
return sb.toString();
}
标准答案:
public static void main(String[] args) {
long t1 = System.currentTimeMillis(); //获取开始时间
System.out.println(getRandomCode());
long t2 = System.currentTimeMillis(); //获取结束时间
System.out.println(t2 - t1); //计算间隔时间(15-20毫秒之间)
}
public static String getRandomCode() {
// 准备数据,将可选择的字符都放入StringBuilder中
StringBuilder sb = new StringBuilder();
for (char ch = 'a'; ch <= 'z'; ch++) {
sb.append(ch);
}
for (char ch = 'A'; ch <= 'Z'; ch++) {
sb.append(ch);
}
for (char ch = '0'; ch <= '9'; ch++) {
sb.append(ch);
}
// 随机获取四位
Random r = new Random();
String code = "";
for (int i = 0; i < 4; i++) {
// 字符串中的字符有索引,随机获取一个索引即相当于随机获取到了该索引的字符
int index = r.nextInt(sb.length()); // 从索引0(包含)到字符串的长度(不包含)
// 获取该索引上的字符
code += sb.charAt(index); //就是这里,它使用了一个“+=”符号,
//所以比我的方法慢了很多
}
// 返回结果
return code;
}
欢迎评论区留言,多多支持我这个小白白白白白白白白白白白白白白白。
标签:ch,符号,开始,System,char,获取,因为,sb,append 来源: https://blog.csdn.net/Da_Youzi/article/details/114682038
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。