我經常需要打印列表或地圖,但我不喜歡其默認方法toString()
的輸出。例如HashMap#toString()
輸出是這樣的:如何爲集合實現toString()?
{key-1=value-1, key-2=value-2, key-3=value-3}
但我想輸出是這樣的:
key-1 = value-1, key-2 = value-2, key-3 = value-3
我創建的延伸HashMap
自定義類和寫我自己toString()
方法,這導致我真正的問題:
public final class CustomMap<K, V> extends HashMap<K, V> {
private static final long serialVersionUID = 1493227382148892732L;
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
final Iterator<Map.Entry<K, V>> entryIterator = entrySet().iterator();
if (entryIterator.hasNext()) {
final Map.Entry<K, V> entry = entryIterator.next();
builder.append(entry.getKey());
builder.append(" = ");
builder.append(entry.getValue());
}
while (entryIterator.hasNext()) {
final Map.Entry<K, V> entry = entryIterator.next();
builder.append(", ");
builder.append(entry.getKey());
builder.append(" = ");
builder.append(entry.getValue());
}
return builder.toString();
}
}
正如你所看到的,我已經重複的代碼,因爲,
面值噸必須被省略一次。那麼我怎樣才能將它重寫爲無重複代碼的快速有效的方法呢?
但是,每個循環都有一個額外的檢查。難道它不會讓大集合變慢嗎? – stevecross 2014-09-03 12:39:37
@feuerball這可以忽略不計。 – Eran 2014-09-03 12:42:53
另一種方法是,每次添加逗號時都會包括第一個逗號,然後在循環播放集合項目的同時,刪除最後一個逗號。 – Atul 2014-09-03 12:45:36