1.Joiner类
将字符串数组按指定分隔符连接起来,或字符串串按指定索引开始使用指定分隔符连接起来
public final String join(Iterator<?> parts) {
return this.appendTo((StringBuilder)(new StringBuilder()), (Iterator)parts).toString();
}
appendTo(StringBuilder, Iterator)的源码
public final StringBuilder appendTo(StringBuilder builder, Iterator<?> parts) {
try {
//调用了appendTo(A, Iterator)方法
this.appendTo((Appendable)builder, (Iterator)parts);
return builder;
} catch (IOException var4) {
throw new AssertionError(var4);
}
}
public <A extends Appendable> A appendTo(A appendable, Iterator<?> parts) throws IOException {
Preconditions.checkNotNull(appendable);
if(parts.hasNext()) {
appendable.append(this.toString(parts.next()));
while(parts.hasNext()) { //从第二个元素开始循环插入要添加的字符
appendable.append(this.separator);
appendable.append(this.toString(parts.next()));
}
}
return appendable;
}
2.Stopwatch类
程序中我们总会需要log某个程序的执行时间,嗯首先想到我之前学过的一个函数
clock_t start,end;
start=clock(); end=clock(); 输出end-start
看一下源码是怎么做的?
用法: System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
...
stopwatch.Stop();
TimeSpan timespan = stopwatch.Elapsed;
public Stopwatch start() { // 先判断是否处于执行状态 checkState(!isRunning, "This stopwatch is already running."); isRunning = true; // 初始化 当前的纳秒时间 startTick = ticker.read(); return this; } public Stopwatch stop() { long tick = ticker.read(); checkState(isRunning, "This stopwatch is already stopped."); isRunning = false; elapsedNanos += tick - startTick; return this; } public Stopwatch reset() { elapsedNanos = 0; isRunning = false; return this; } private long elapsedNanos() { return isRunning ? ticker.read() - startTick + elapsedNanos : elapsedNanos; }// 计算纳秒 public long elapsed(TimeUnit desiredUnit) { return desiredUnit.convert(elapsedNanos(), NANOSECONDS); }// 转换其他单位