Read a little source, very shallow kind, something that is very interesting, record it.
Nature 1.ArrayList is Object []
public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); } }
Nature 2.HashSet a HashMap
public HashSet() { map = new HashMap<>(); }
3.String the nature of the final type char []
private final char value[]; public String() { this.value = "".value; } public String(String original) { this.value = original.value; this.hash = original.hash; } public String(char value[]) { this.value = Arrays.copyOf(value, value.length); }
4.StringBuffer and StringBuilder are inherited from AbstractStringBuilder
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence
The main difference 5.StringBuffer in StringBuffer and StringBuilder inside a lot Synchronize operation, StringBuilder inside did not. Is the former general said thread-safe.
StringBuffer:
@Override public synchronized StringBuffer append(Object obj) { toStringCache = null; super.append(String.valueOf(obj)); return this; }
StringBuilder:
@Override public StringBuilder append(Object obj) { return append(String.valueOf(obj)); }