Joiner类&Stopwatch类

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 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);
}// 转换其他单位

你可能感兴趣的:(JAVA)